hdu1576

来源:互联网 发布:蜗牛睡眠知乎 编辑:程序博客网 时间:2024/05/16 12:18

A/B

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4534    Accepted Submission(s): 3524
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
 
设ans=(A/B)%9973
则(A/B)=ans(mod 9973) 
A=(b*ans)(mod 9973)
(A%9973)=(b*ans)(mod 9973)
n=(b*ans)(mod 9973)
b*ans=n(mod 9973)
求ans,利用扩展欧几里德解线性同余方程即可
#include<stdio.h>#define LL long longvoid exgcd(LL a,LL b,LL &d,LL &x,LL &y){    if(b==0)    {        d=a;        x=1;        y=0;    }    else    {        exgcd(b,a%b,d,y,x);        y-=x*(a/b);    } }  int main() {     int t;     LL n,b,d,x,y;     scanf("%d",&t);     while(t--)     {         scanf("%lld%lld",&n,&b);         exgcd(b,9973,d,x,y);         x=(x*n%9973+9973)%9973;         printf("%lld\n",x);     }     return 0; }
0 0
原创粉丝点击