洛谷题解 P1592 【互质】

原题传送门

题目描述

输入两个正整数n和k,求与n互质的第k个正整数。

输入格式

仅一行,为两个正整数n(≤106)和k(≤108)。

输出格式

一个正整数,表示与n互质的第k个正整数。

输入输出样例

输入 #1

10 5

输出 #1

11
--------------------------------------------------以下为题解部分---------------------------------------

分析:

思路:

这个题通读一遍题以后,你会发觉:这不就是一道纯数学题吗?

既然看懂了题意,那就很简单了。

补充一点简单的数论知识:

两个数的最大公因数是1是,此两数互质。(dalao勿喷
好了,不多说,上代码

代码:

#include<cstdio>
using namespace std;
int n,k,q,p[1000010];
inline int gcd(int a,int b){	//计算a,b的最大公因数 
	return b==0?a:gcd(b,a%b);
}
int main(){
    scanf("%d %d",&n,&k);
    for(int i=1;i<=n;i++){	//枚举 
        if(gcd(n,i)==1)		//众所周知,当两个数的最大公因数为1时,此两数互质。 
            p[++q]=i;		//记录结果 
    }
    printf("%d",(k-1)/q*n+p[k%q]);	//输出n互质的第k个正整数。 
    return 0;
}
本文欢迎转载,转载时请注明本文链接
原文地址:https://www.cnblogs.com/-pwl/p/12287739.html