hdoj-1576-A/B

来源:互联网 发布:360数据恢复免费版 编辑:程序博客网 时间:2024/05/16 00:29

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,由于除法的%有特殊的性质,所以我们可以通过ex_gcd,求出B的逆元,从而求解

#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;typedef long long ll;const int mod=9973;ll extend_gcd(ll a,ll b,ll &x,ll &y){    if(a==0&&b==0) return -1;    if(b==0){x=1;y=0;return a;}    ll d=extend_gcd(b,a%b,y,x);    y-=a/b*x;    return d;}ll inv(ll a,ll n){    ll x,y;    ll d=extend_gcd(a,n,x,y);    if(d==1) return (x%n+n)%n;    else return -1;}int main(){    int t;    scanf("%d",&t);    while(t--)    {        ll n,b;        scanf("%lld%lld",&n,&b);        ll ans=inv(b,mod);        printf("%I64d\n",n*ans%mod);    }    return 0;}
0 0
原创粉丝点击