费马小定理
N为任意正整数,P为素数且N不能被P整除(显然N和P互质),
则(N^(P-1)) % P == 1
**********************************************************************************************************
所以如果N小于P,则N和P肯定互质。
那么随机抽取N < P,如果(N^(P-1)) % P != 1,则P为合数
如果等于1,则P有可能为质数;而且N取的组数越多,结果越精确
*********************************************************************************************************
bool miller(LL x)//错误率:1/(4^t), t越大越精确,也越慢
{
srand(time(NULL));
if(x == 2) return 1;
if(!(x&1)) return 0;
int t = 20;//测试数据数量
LL tmp, ret;
while(t--)
{
tmp = rand()%(x-1)+1;
ret = pow_mod(tmp, x-1, x);
if(ret != 1) return 0;
}
return 1;
}
pow_mod();函数见博客:
https://blog.youkuaiyun.com/jay__bryant/article/details/80081968