zoukankan      html  css  js  c++  java
  • hdu 1576 A/B

    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
    2 1000 53
    87 123456789
     
    Sample Output
    7922
    6060
    我们不妨设(A/B)%9973=t,则有9973*a+t=A/B,A能够被B整除,故有A=(9973*a+t)*B;而对于n=A%9973,则有9973*y+n=A;
    所以我们可以得到(9973*a+t)*B=9973*y+n;故(9973*a+t)*B-9973*y=n;我们将(9973*a+t)看成一个整体X,于是就可以得到方程
    B*X-9973*y=n;再用扩展欧几里得定理就可以算出X,而X=A/B,就可以算出(A/B)%9973了。代码如下:
    #include<stdio.h>
    __int64 exgcd(int a,int b,__int64 &x,__int64 &y)
    {
        if(b==0)
        {
            x=1;y=0;return a;
        }
        __int64 r=exgcd(b,a%b,x,y);
        __int64 temp=x;x=y;y=temp-(a/b)*y;
        return r;
    }
    int main()
    {
        __int64 n,b,t,x,y;//如果不是__int64,结果就会溢出。
        scanf("%I64d",&t);
        while(t--)
        {
            scanf("%I64d%I64d",&n,&b);
            exgcd(b,9973,x,y);
            x=x*n;
            x=(x%9973+9973)%9973;
            printf("%I64d
    ",x);
        }
        return 0;
    }
  • 相关阅读:
    微信小程序开发入门(二)
    微信小程序开发入门(一)
    django入门与实践(续)
    django入门与实践(开)
    Python六剑客
    python入门(二十讲):爬虫
    python入门(十九讲):多进程
    ES6箭头函数
    ES6
    数据库常用命令
  • 原文地址:https://www.cnblogs.com/duan-to-success/p/3484236.html
Copyright © 2011-2022 走看看