Miller_rabin 素数测试 学习笔记
Miller_rabin 素数测试
一种用来判断素数的算法。
前置芝士
威尔逊定理
若
证明:
充分性证明:
如果
必要性证明:
首先,我们知道
那么我们只需要证明
设
对于
当
移项就可以得到
那么只有两个解,
所以其他情况都可以找到对应的
所以
费马小定理
若
证明:
因为
所以
所以
就是
由威尔逊定理得出,
两边同时约去
所以可以得出
二次探测定理
若
证明:
原式移项就可以得到
那么只有两个解,
但是这些又和 Miller_rabin 有什么关系呢?
我们把
然后随机出一个数
但如果我们在自乘之后
else
那么用
Code
#include<bits/stdc++.h>
#define int __int128
#define N_4 10004
#define N_5 100005
#define N_6 1000006
#define Mod 1000000007
#define FOR(i,j,k) for(long long i=j;i<=k;++i)
#define ROF(i,j,k) for(long long i=j;i>=k;--i)
using namespace std;
inline int read(){
int x=0,f=1;
char ch;
ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') f=-f;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=x*10+(ch-'0');
ch=getchar();
}
return x*f;
}
int T,n,tot;
int gg[6]={0,2,7,61,63,97};
bool isprime[500005];
int prime[500005],an[500005];
inline void Euler(int n){
isprime[1]=true;isprime[0]=true;
for(register int i=2;i<=n;i++){
if(!isprime[i])
prime[++tot]=i;
an[i]=tot;
for(register int j=1;j<=tot&&prime[j]*i<=n;j++){
isprime[i*prime[j]]=true;
if(i%prime[j]==0)
break;
}
}
return;
}
inline int ksm(int a,int b,int mod){
int ans=1,p=a,g=b;
while(g){
if(g&1) ans=(ans*p)%mod;
p=(p*p)%mod;
g>>=1;
}
return ans;
}
int mul(int a,int b,int p){return (a*b-(int)((__float128)a/p*b)*p+p)%p;}
inline bool miller_rabin(int P){
if(P==1) return 0;
int t=P-1,k=0;
while(!(t&1)) ++k,t>>=1;
for(register int i=1;i<=5;++i){
if(P==gg[i]) return true;
int a=ksm(gg[i],t,P),nxt=a;
for(register int j=1;j<=k;++j){
nxt=mul(nxt,nxt,P);
if(nxt==1&&a!=1&&a!=P-1) return false;
a=nxt;
}
if(a!=1) return false;
}
return true;
}
signed main(){
T=read();
Euler(500000);
while(T--){
n=read();
if(n<500000){
if(isprime[n]) cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
else{
if(!miller_rabin(n)) cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
}
return 0;
}
6666
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App