题意求从1开始第k个与n互素的数
因为gcd(b×t+a,b)=gcd(a,b)
所以求出n以内的与n互素的数即可
#include<cstdio>
#include<iostream>
using namespace std;
#define M 1000005
int p[M];
int gcd(int a,int b)
{
if(a%b==0)
{
return b;
}
return gcd(b,a%b);
}
int main()
{
int n,i,cnt,k,t;
while(~scanf("%d%d",&n,&k))
{
cnt=0;
for(i=1;i<=n;i++) //因为n可能为1,so i <= n
{
if(gcd(n,i)==1)
{
p[cnt++]=i;
}
}
if(k%cnt==0)
{
printf("%d\n",p[cnt-1]+(k/cnt-1)*n);
}
else
{
printf("%d\n",p[k%cnt-1]+k/cnt*n);
}
}
return 0;
}
1060

被折叠的 条评论
为什么被折叠?



