当前位置:网站首页>Miller_Rabin 米勒拉宾概率筛【模板】
Miller_Rabin 米勒拉宾概率筛【模板】
2022-07-31 13:28:00 【秦小咩】
Miller_Rabin筛法是一种正确率极高,复杂度优秀的概率筛法,将质数分为2和奇质数,对于奇质数n,将n-1其分解为 2^p + m ,然后,取若干[1,n-1]的随机数a,本模板取了20次,每次判断是否有
a^m 三 1(mod n) 或者 是否有 [0,p-1]的j,满足 a^(2jm) 三 n-1 (mod n)
满足二者之一表示本次判断成功,20次中有一次失败就表明不是素数,20次都成功,那么可以说是一个素数。
验证正确性如下,取2-1e6全部数字,进行正确性判断,正确个数1e6-1,全部正确
甚至可以将判断次数缩小至5,也能保证完全正确

# include<iostream>
# include<iomanip>
# include<math.h>
using namespace std;
typedef long long int ll;
ll random(ll n) //生成[0,n]范围内随机数
{
return rand()%(n-1);
}
ll quick_mul(ll a, ll b, ll mod)
{
ll ans=0;
while(b)
{
if(b&1)
ans=(ans+a)%mod;
a=(a+a)%mod;
b>>=1;
}
return ans;
}
ll quick_pow(ll base,ll pow, ll mod)
{
ll ans=1;
while(pow)
{
if(pow&1)
ans=ans*base%mod;
pow>>=1;
base=base*base%mod;
}
return ans;
}
bool witness(ll a, ll n)
{
ll temp=n-1;
int j=0;
while(temp%2==0)
{
temp/=2;
j++;
}
ll x=quick_pow(a,temp,n);
if(x==1||x==n-1)
return 1;
while(j--)
{
x=quick_mul(x,x,n);
if(x==n-1)
return 1;
}
return 0;
}
bool miller_rabin(ll n)
{
if(n==2)
return 1;
if(n<2||n%2==0)
return 0;
for(int i=1; i<=20; i++)
{
ll a=random(n)+1;
// cout<<a<<endl;
if(!witness(a,n))
return 0;
}
return 1;
}
int prime[1000000+10];
bool not_prime[1000000+10];
int tot;
void init()
{
for(int i=2; i<=1000000; i++)
{
if(!not_prime[i])
{
tot++;
prime[tot]=i;
}
for(int j=1; j<=tot&&prime[j]*i<=1000000; j++)
{
not_prime[i*prime[j]]=1;
if(i%prime[j]==0)
{
break;
}
}
}
}
int main ()
{
init();
ll n;
int cnt=0;
for(n=2;n<=1000000;n++)
{
if(miller_rabin(n)!=(!not_prime[n]))
{
cout<<"***";
}
else
cnt++;
}
cout<<cnt<<endl;
return 0;
}
边栏推荐
猜你喜欢

网络协议及相关技术详解

IDEA can't find the Database solution

「面经分享」西北大学 | 字节 生活服务 | 一面二面三面 HR 面

Edge Cloud Explained in Simple Depth | 4. Lifecycle Management

报错IDEA Terminated with exit code 1

Introduction to the PartImageNet Semantic Part Segmentation dataset

Install the latest pytorch gpu version

Spark Learning: Add Custom Optimization Rules for Spark Sql

MATLAB | 我也做了一套绘图配色可视化模板

Reasons and solutions for Invalid bound statement (not found)
随机推荐
All-round visual monitoring of the Istio microservice governance grid (microservice architecture display, resource monitoring, traffic monitoring, link monitoring)
0X7FFFFFFF,0X80000000「建议收藏」
MATLAB | 我也做了一套绘图配色可视化模板
Spark学习:为Spark Sql添加自定义优化规则
Error: npm ERR code EPERM
Batch大小不一定是2的n次幂!ML资深学者最新结论
技能大赛dhcp服务训练题
DELL SC compellent 康贝存储系统怎么抓取配置信息
Text similarity calculation (Chinese and English) detailed explanation of actual combat
[CPU Design Practice] Simple Pipeline CPU Design
八大排序汇总及其稳定性
Spark Learning: Add Custom Optimization Rules for Spark Sql
Centos7 install mysql5.7
聊聊 SAP 产品 UI 上的消息显示机制
IDEA如何运行web程序
【牛客刷题-SQL大厂面试真题】NO3.电商场景(某东商城)
图像大面积缺失,也能逼真修复,新模型CM-GAN兼顾全局结构和纹理细节
技能大赛训练题: 子网掩码划分案例
Adding data nodes and decommissioning data nodes in the cluster
查看Mysql数据库版本