题解 P2613 【【模板】有理数取余】

Great_Influence

2018-05-08 19:42:57

Solution

不要管高精。。。可以发现,$a$和$b$只有对$mod$的余数才会有用。直接一路滚过去取模即可。至于除法,费马小定理需要了解: $$a^{p-1}\equiv 1\pmod p$$ 推导一下就可以得到: $$a^{p-2}\equiv a^{-1}\pmod p$$ 答案就是 $$a*b^{-1}$$ 直接计算即可。 代码: ```cpp #include<cstdio> #include<cstdlib> #include<iostream> #include<algorithm> #include<cstring> #define For(i,a,b) for(i=(a),i##end=(b);i<=i##end;++i) #define Forward(i,a,b) for(i=(a),i##end=(b);i>=i##end;--i) #define Rep(i,a,b) for(register int i=(a),i##end=(b);i<=i##end;++i) #define Repe(i,a,b) for(register int i=(a),i##end=(b);i>=i##end;--i) #define Chkmax(a,b) a=a>b?a:b #define Chkmin(a,b) a=a<b?a:b using namespace std; template<typename T>inline void read(T &x){ T s=0,f=1;char k=getchar(); while(!isdigit(k)&&k^'-')k=getchar(); if(!isdigit(k)){f=-1;k=getchar();} while(isdigit(k)){s=s*10+(k^48);k=getchar();} x=s*f; } void file(void){ #ifndef ONLINE_JUDGE freopen("water.in","r",stdin); freopen("water.out","w",stdout); #endif } const int MAXN=1e4+7; const int mod=19260817; static char a[MAXN],b[MAXN]; static int n,m,A,B; typedef long long ll; inline int power(int a,int b) { static int sum; for(sum=1;b;b>>=1,a=(ll)a*a%mod)if(b&1) sum=(ll)sum*a%mod; return sum; } int main(void){ file(); scanf("%s%s",a,b);n=strlen(a)-1,m=strlen(b)-1; Rep(i,0,n)A=(A*10+(a[i]^48))%mod; Rep(i,0,m)B=(B*10+(b[i]^48))%mod; if(B==0)return puts("Angry!"),0; printf("%d\n",(ll)A*power(B,mod-2)%mod); return 0; } ```