求自然数中第k个与n互质的数
可以借助规律:如果ab互质,则a+t*b与b也互质,因此可得在1-(b-1)中的互质数的个数与t-(t+b-2)中的互质数的个数相同且一一对应
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
long long int gcd(long long int a,long long int b)
{
if(b==0)return a;
else return gcd(b,a%b);
}
long long int fin(long long int a)
{
long long int ans=a;
for(long long int i=2;i<=a;i++)
{
if(a%i==0)
{
ans=ans/i*(i-1);
while(a%i==0)
{
a/=i;
}
}
}
if(a>1)
{
ans=ans/a*(a-1);
}
return ans;
}
int main(){
long long int m,k;
while(scanf("%lld%lld",&m,&k)!=EOF)
{
long long int m1=fin(m);
long long int k1=k%m1;
if(k1==0)k1=m1;
long long int mu=k/m1;
if(k1==m1)mu--;
long long int js=1;
long long int i;
for(i=1;i<=m;i++)
{
if(gcd(i,m)==1)
{
if(js==k1)break;js++;
}
}
long long int ans=i+m*mu;
cout<<ans<<endl;
}
return 0;
}
//如果ab互质,则a+t*b与b也互质,因此可得在1-(b-1)中的互质数的个数与t-(t+b-2)中的互质数的个数相同且一一对应