关于 Miller Rabin
  • 板块学术版
  • 楼主intemist
  • 当前回复7
  • 已保存回复9
  • 发布时间2024/1/23 11:04
  • 上次更新2024/1/23 14:51:23
查看原帖
关于 Miller Rabin
531206
intemist楼主2024/1/23 11:04

以下代码(来自某博客)

ll pri[]={2,3,5,7,11,13,17,19,23,29,31,37};
inline bool chk(ll x)
{
	ll v=qpow(x,mod-1);
	if(v!=1)return 0;
	ll d=mod-1;
	while(!(d&1))
	{
		d>>=1;
		v=qpow(x,d);
		if(v==mod-1)return 1;
		if(v!=1)return 0;
	}
	return 1;
}
inline bool MR(ll x)
{
	mod=x;
	for(auto p:pri)
	{
		if(x==p)return 1;
		if(!chk(p))return 0;
	}
	return 1;
}

学的时候比较疑惑为什么 if(v==mod-1)return 1; 碰到 mod−1mod-1 可以直接返回,如果后面算出来的 v≠1v\not=1 且 v≠mod−1v\not=mod-1 怎么办。。

2024/1/23 11:04
加载中...