题目描述
给出一个有理数 $c=frac{a}{b}$ ,求 c mod 19260817 的值。
输入输出格式
输入格式:
一共两行。
第一行,一个整数 aa 。
第二行,一个整数 bb 。
输出格式:
一个整数,代表求余后的结果。如果无解,输出Angry!
输入输出样例
说明
对于所有数据, 0≤a,b≤1010001
Solution:
本题太板子,不多讲。
读入时处理一下$a,b$,先取模一下,然后直接扩欧或者费马小定理搞出$b$的逆元$b^{-1}$,最后乘下取模就好了。
代码:
#include<bits/stdc++.h> #define il inline #define ll long long #define For(i,a,b) for(int (i)=(a);(i)<=(b);(i)++) #define Bor(i,a,b) for(int (i)=(b);(i)>=(a);(i)--) using namespace std; const int N=10005,mod=19260817; int la,lb,n,m; char a[N],b[N]; il ll fast(ll s,int k){ ll ans=1; while(k){ if(k&1)ans=ans*s%mod; k>>=1; s=s*s%mod; } return ans; } int main(){ scanf("%s%s",a+1,b+1); la=strlen(a+1),lb=strlen(b+1); For(i,1,la) n=((n<<3)+(n<<1)+a[i]-48)%mod; For(i,1,lb) m=((m<<3)+(m<<1)+b[i]-48)%mod; if(!m)puts("Angry!"),exit(0); printf("%lld",n*fast(m,mod-2)%mod); return 0; }