由gcd(a,b)=gcd(a+k*b,b)得如果a和b互素,那么a+k*b和b也互素,如果a+k*b与b不互素,那么a和b也不互素,所以所有与n互素的数对n有周期性,那么只要求出所有小于n且与n互素的数就能求出第k个与n互素的数。
#include<iostream>
#include<math.h>
#include<vector>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
int gcd(int x,int y){
return y==0 ? x:gcd(y,x%y);
}
int a[1000005];
int main(){
int m,k;
while(scanf("%d%d",&m,&k)!=EOF){
int p=0;
for(int i=1;i<=m;i++){
if(gcd(i,m)==1)a[p++]=i;
}
if(k%p==0)printf("%d\n",k/p*m-m+a[p-1]);
else printf("%d\n",k/p*m+a[k%p-1]);
}
return 0;
}