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

顾z

2018-08-11 07:26:31

Solution

**题目描述** 给出一个有理数 c=a/b ,求 c mod 19260817的值。 **说明** 对于所有数据, 0≤a,b≤10^10001 **分析:** 一看题 这么短 哇简单!况且19260817还是个素数!(美滋滋 再一看数据 我天 可怕 **10^10001** 一看 完了 要打高精 ~~(但我打高精肯定GG啊~~ 一想 根据**同余**好像可做~~(前面的大佬讲过了我就不赘述了~~ 哦 对了 还有**~~费马小定理~~**: **a^phi(p)≡1(mod p)** (只对于**p是质数**的情况哦 然后对于**快读** 略做修改就可以了 --------------------代码---------------------- ```cpp #include<bits/stdc++.h> #define IL inline #define RI register int #define mod 19260817 long long a,b,ans; IL void read(long long &x){ int f=1;x=0;char s=getchar(); while(s>'9'||s<'0'){if(s=='-')f=-1;s=getchar();} while(s<='9'&&s>='0'){x=x*10%mod+(s-'0')%mod;s=getchar();}//改成了取模~~ x=x%mod*f;//改成了取模~ } IL long long ksm(long long x,long long p) { long long res=1; for(;p;p>>=1,x=x*x%mod) if(p&1)res=res*x%mod; return res; }//快速幂 int main() { read(a);read(b); if(b==0){printf("Angry!");return 0;} //注意这里 特判! 不要忘记 还有 不要忘记感叹号!!! ans=a*ksm(b,mod-2); printf("%lld",(ans%mod+mod)%mod); } ```