hdu 1576 ex_gcd

来源:互联网 发布:什么是数组 编辑:程序博客网 时间:2024/06/05 09:09

A/B

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2805    Accepted Submission(s): 2073


Problem 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
 

Author
xhd
 

Source
HDU 2007-1 Programming Contest
#include <iostream>#include<stdio.h>#include<string.h>#include<algorithm>#include<math.h>#define ll long longusing namespace std;//扩展gcd,求ax+by=gcd(a,b)的解int e_gcd(ll a,ll b,ll &x,ll &y){    if(b==0)    {        x=1;        y=0;        return a;    }    ll ans=e_gcd(b,a%b,x,y);    ll tmp=x;    x=y;    y=tmp-a/b*y;    return ans;}//求线性同余方程最小解int cal(ll a,ll b,ll c){    ll x,y;    ll gcd=e_gcd(a,b,x,y);    if(c%gcd!=0) return -1;    x*=c/gcd;    b/=gcd;    if(b<0) b=-b;    ll ans=x%b;    if(ans<=0) ans+=b;    return ans;}int main(){   int t;   cin>>t;   while(t--)   {       ll n,B;       cin>>n>>B;       //x*B-y*9973=n       ll ans=cal(B,-9973,n);       printf("%I64d\n",ans);   }}

0 0
原创粉丝点击