A/B(扩展欧几里得)

来源:互联网 发布:手机淘宝换回默认皮肤 编辑:程序博客网 时间:2024/06/11 14:49

Description

要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1)。
 

Input

数据的第一行是一个T,表示有T组数据。
每组数据有两个数n(0 <= n < 9973)和B(1 <= B <= 10^9)。
 

Output

对应每组数据输出(A/B)%9973。
 

Sample Input

21000 5387 123456789
 

Sample Output

79226060
 

#include<algorithm>#include<iostream>#include<cstdio>#include<string>using namespace std;int main(){    int t;    cin >> t;    while (t--)    {        long long n, b;        cin >> n >> b;        for (int i = 0; i < 9973; ++i)        {            if((b * i - n) % 9973 == 0)            {                cout << i << endl;                break;            }        }    }    return 0;}
别人的代码:
#include<iostream>#include<stdio.h>#include<algorithm>#include<cmath>using namespace std;int x,y,d;void exp_gcd(int a,int b){    int temp;    if(b==0)    {        x=1;        y=0;        d=a;//可以不要        }    else    {        exp_gcd(b,a%b);        temp=x;        x=y;        y=temp-(a/b)*y;    }}int main(){    int t,b,n;    scanf("%d",&t);    while(t--)    {        scanf("%d%d",&n,&b);        exp_gcd(9973,b);        while(y<=0)            y=(9973+y%9973)%9973;//最小正整解        printf("%d\n",(n%9973*y%9973)%9973);    }    return 0;}


0 0
原创粉丝点击