浅谈费马小定理

费马小定理

费马小定理是可以处理掉很大数字指数倍取模的。
不过这个有条件的:p是一个质数,而整数a不是p的倍数
a^(p-1) ≡ 1(mod p); 		≡ :同余,指两者取余数相同

打个比方:2 ^ 100 % 13这个怎么算
如果说之前那种方法,我们先乘出来再来取余,不说时间上问题,但是数据如何保留下俩也是很麻烦
因此我们用这个公式
( a * b ) % p == ( a % p ) * ( b % p ) % p配合一下

((2^12)^8 * 2^4) % 13 ≡  ( 1 ) %13 * ( 2^4 % 13 ) % 13
(这里我直接是两步到位)
#include
#include
#include
using namespace std;
int main()
{
	int base, exp, mod;
	cin >> base >> exp >> mod;
	int modnumber = exp % (mod - 1);
	int ans = 1;
	ans = (int)(ans * pow(base,modnumber));
	cout << ans % mod << endl;
}

你可能感兴趣的:(算法)