原题传送门
题目描述
输入两个正整数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;
}