博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zoj 月赛B题(快速判断一个大数是否为素数)
阅读量:7216 次
发布时间:2019-06-29

本文共 1569 字,大约阅读时间需要 5 分钟。

给出一个64位的大数,如何快速判断其是否为素数

#include
#include
#include
#include
using namespace std;typedef long long LL;LL n,m;//****************************************************************// Miller_Rabin 算法进行素数测试//速度快,而且可以判断 <2^63的数//****************************************************************const int S=20;//随机算法判定次数,S越大,判错概率越小LL mult_mod(LL a,LL b,LL mod) //(a*b)%c a,b,c<2^63{ a%=mod; b%=mod; LL ans=0; while(b) { if(b&1) { ans=ans+a; if(ans>=mod) ans=ans-mod; } a=a<<1; if(a>=mod) a=a-mod; b=b>>1; } return ans;}LL pow_mod(LL a,LL b,LL mod) // a^b%mod{ LL ans=1; a=a%mod; while(b) { if(b&1) { ans=mult_mod(ans,a,mod); } a=mult_mod(a,a,mod); b=b>>1; } return ans;}//以a为基,n-1=x*2^t a^(n-1)=1(mod n) 验证n是不是合数//一定是合数返回true,不一定返回falsebool check(LL a,LL n,LL x,LL t){ LL ret=pow_mod(a,x,n); LL last=ret; for(int i=1;i<=t;i++) { ret=mult_mod(ret,ret,n); if(ret==1 && last!=1 && last!=n-1) return true;//合数 last=ret; } if(ret!=1) return true; else return false;}// Miller_Rabin()算法素数判定//是素数返回true.(可能是伪素数,但概率极小)//合数返回false;bool Miller_Rabin(long long n){ if(n<2)return false; if(n==2) return true; if( (n&1)==0) return false;//偶数 LL x=n-1; LL t=0; while( (x&1)==0 ) { x>>=1;t++;} for(int i=0;i
0) { LL sum=0; for(LL i=0; i

  

转载地址:http://eluym.baihongyu.com/

你可能感兴趣的文章
将Eclipse代码导入到Android Studio的两种方式
查看>>
ASP.Net4.0中新增23项功能
查看>>
HTML JS 数据校验
查看>>
Mysql中分页查询两个方法比较
查看>>
保存一下dedecms数据库表和字段说明,方便日后查询
查看>>
公众号群发文章支持添加小程序
查看>>
5.6. Spring boot with Logging
查看>>
MySQL 视图技术
查看>>
第 138 章 Spark
查看>>
flask 使用 SQLAlchemy 的两种方式
查看>>
Nginx入门笔记之————配置文件结构
查看>>
SQL Server-聚焦深入理解死锁以及避免死锁建议(三十三)
查看>>
Android(Linux)实时监控串口数据
查看>>
Open Sans字体兼容问题解决办法[font-face]
查看>>
现在的我为什么不泡技术论坛了
查看>>
AES加密
查看>>
MPLS LDP随堂笔记1
查看>>
HTTPS 也不安全?被发现新漏洞会暴露你的数据
查看>>
MySQL · 最佳实践 · 什么时候该升级内存规格
查看>>
花卉世界大观园和杂技之游
查看>>