POJ 2773 Happy 2006 模的性质

POJ 2773
对于给出的整数m,找到按升序排列的第kk个和m互素的整数。
mm互素的数对mm取模具有周期性:如果小于mm且与mm互素的数有nn个,其中第ii个是aia_i,则第kn×n+i\lfloor \dfrac{k}{n}\rfloor \times n +i个与mm互素的数是kn×m+ai\lfloor \dfrac{k}{n}\rfloor \times m+a_i

#include<bits/stdc++.h>
#define ll long long
#define Max(a,b) ((a) > (b) ? (a) : (b))
#define INF 0x3f3f3f3f
const int N = 1e6+10;
const int mod = 1e9+7;
ll gcd(ll p,ll q){return q==0?p:gcd(q,p%q);}
using namespace std;
int m,k;
int prime[N];
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    while(scanf("%d%d",&m,&k)!=EOF) {
        int n=0;
        for(int i=1;i<=m;i++)
            if(gcd(i,m)==1) prime[++n]=i;
        if(k%n==0)
            printf("%d\n",(k/n-1)*m + prime[n]);
        else
            printf("%d\n",(k/n)*m + prime[k%n]);

    }
    return 0;
}
posted @ 2019-08-04 22:16  Mr.doublerun  阅读(16)  评论(0)    收藏  举报