数学【p2613】 【模板】有理数取余(费马小定理)
题目描述
给出一个有理数 c=a/b ,求 c mod 19260817的值。
说明
对于所有数据, 0≤a,b≤10^10001
分析:
一看题 这么短 哇简单!况且19260817还是个素数!(美滋滋
再一看数据 我天 可怕 10^10001
一看 完了 要打高精 (但我打高精肯定GG啊
一想 根据同余好像可做(前面的大佬讲过了我就不赘述了
哦 对了 还有费马小定理:
a^phi(p)≡1(mod p) (只对于p是质数的情况哦
然后对于快读 略做修改就可以了
--------------------代码----------------------
#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);
}
除特殊声明外,本博客作品均由顾z创作。
未经博主允许,不得转载