数学【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);
}
原文地址:https://www.cnblogs.com/-guz/p/9620089.html