【SDUTOJ 3314】 l (扩欧裸题)

【SDUTOJ 3314】 l (扩欧裸题)

比赛时候居然没看出来。。眼拙了 做题少了……找一个k令k*m%n=1...这不就是求x*m = 1(mod n)。。。


倮倮倮


代码如下:


#include <bits/stdc++.h>

using namespace std;

int Gcd(int a,int b,int &x,int &y)
{
    if(!b)
    {
        x = 1;
        y = 0;
        return a;
    }

    int ans,tmp;
    ans = Gcd(b,a%b,x,y);
    tmp = y;
    y = x-a/b*y;
    x = tmp;
    return ans;
}

int cal(int m,int mod)
{
    int x,y,gcd;
    gcd = Gcd(m,mod,x,y);
    x = x/gcd;
    return (x+mod)%mod;
}

int main()
{
    int m,n;
    while(~scanf("%d %d",&m,&n))
    {
        printf("%d\n",cal(m,n));
    }
    return 0;
}


你可能感兴趣的:(【SDUTOJ 3314】 l (扩欧裸题))