miller rabin 素性测试

Posted xiaoziyao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了miller rabin 素性测试相关的知识,希望对你有一定的参考价值。

#include<stdio.h>

#include<stdlib.h>
#include<time.h>
const int times=100;
long long n;
__int128 ksm(__int128 a,__int128 b,__int128 m){
  __int128 res=1;
  while(b){
    if(b&1)
      res=(res*a)%m;
    a=(a*a)%m,b>>=1;
  }
  return res%m;
}
__int128 miller_rabin(long long x){
  if(x<2)
    return 0;
  if((x&1)==0)
    return x>2? 0:1;
  __int128 y=x-1,cnt=0,num,last,i,j;
  while((y&1)==0)
    y>>=1,cnt++;
  for(i=1;i<=times;i++){
    num=ksm(rand()%(x-1)+1,y,x),last=num;
    for(j=1;j<=cnt;j++){
      num=num*num%n;
      if(last!=1&&last!=x-1&&num==1)
        return 0;
      last=num;
    }
    if(num!=1)
      return 0;
  }
  return 1;
}
int main(){
  srand(time(0));
  while(~scanf("%lld",&n))
  puts(miller_rabin(n)==0? "N":"Y");
  return 0;
}

以上是关于miller rabin 素性测试的主要内容,如果未能解决你的问题,请参考以下文章

Miller-Rabin素性测试(Python实现)

关于Miller-Rabin素性测试,高手进

Miller-Rabin 素性测试

记一次使用快速幂与Miller-Rabin的大素数生成算法

Miller_Rabin(米勒拉宾)素数测试

Miller-Rabin素数测试