这里介绍一种分数取模的代码:
假设要求
这里要引用小费马定理 (有兴趣的可以百度查下证明过程) ,这里对这个公式做点改动
在代码里面,我们可以通过扩展欧几里得定理来求一个数的模,但是扩展欧几里得暂时还不能求分数的模,那么这里可以将这个分数的取模换成对整数求模来得出相同的结果,也就是说把 这个问题转化求
现在把代码放上来:
long long fast_mod(long long a,long long b) {
long long r = 1;
a %= mod;
while (b) {
if (b & 1) r = (r*a) % mod;
a = (a*a) % mod;
b >>= 1;
}
//cout << r << endl;
return r;
}
同样的,如果分子不为1,那么 可以用(这是取模的运算规则,可以在百度查找一下,对取模十分有用)