题目描述
分析:
求出与m互质的数中第k大的数
-
由欧几里德算法GCD(a, b)=GCD(b mod a, a),可以推出GCD(b, b×t+a)=GCD(a, b),其中t为任意整数。如果a与b互
素,则b×t+a与b也一定互素; -
与m互素的数对m取模具有周期性:如果小于m且 与m互素的数有j个,其中第i个是ai,则第m×j+i个与m互
素的数是m×j+ai。 -
首先,按升序求小于m,并和m互素的整数,并存入数组;然后根据这一数组,以及与m互素的数对m取模具有周期性,求出第K个与m互素的数
#include<iostream>
using namespace std;
int pri[1000000];
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
int main(){
int m,k;
while(cin>>m>>k){
int j=0;
for(int i=1;i<=m;i++){
if(gcd(m,i)==1)
pri[j++]=i;
}
if(k%j!=0)
cout<<k/j*m+pri[k%j-1]<<endl;
else
cout<<(k/j-1)*m+pri[j-1]<<endl;
}
}