Miller_Rabin算法_单个素数检测_启发式算法
- /**
- Miller_Rabin 算法进行素数测试
- 快速判断一个<2^63的数是不是素数,主要是根据费马小定理
- */
- #define ll __int128
- const int S=; ///随机化算法判定次数
- ll MOD;
- ///计算ret=(a*b)%c a,b,c<2^63
- ll mult_mod(ll a,ll b,ll c)
- {
- a%=c;
- b%=c;
- ll ret=;
- ll temp=a;
- while(b)
- {
- if(b&)
- {
- ret+=temp;
- if(ret>c)
- ret-=c;//直接取模慢很多
- }
- temp<<=;
- if(temp>c)
- temp-=c;
- b>>=;
- }
- return ret;
- }
- ///计算ret=(a^n)%mod
- ll pow_mod(ll a,ll n,ll mod)
- {
- ll ret=;
- ll temp=a%mod;
- while(n)
- {
- if(n&)
- ret=mult_mod(ret,temp,mod);
- temp=mult_mod(temp,temp,mod);
- n>>=;
- }
- return ret;
- }
- ///通过费马小定理 a^(n-1)=1(mod n)来判断n是否为素数
- ///中间使用了二次判断,令n-1=x*2^t
- ///是合数返回true,不一定是合数返回false
- bool check(ll a,ll n,ll x,ll t)
- {
- ll ret=pow_mod(a,x,n);
- ll last=ret;//记录上一次的x
- for(int i=;i<=t;i++)
- {
- ret=mult_mod(ret,ret,n);
- if(ret==&&last!=&&last!=n-)
- return true;//二次判断为是合数
- last=ret;
- }
- if(ret!=)
- return true;//是合数,费马小定理
- return false;
- }
- ///Miller_Rabbin算法
- ///是素数返回true(可能是伪素数),否则返回false
- bool Miller_Rabbin(ll n)
- {
- if(n<) return false;
- if(n==) return true;
- if((n&)==) return false;//偶数
- ll x=n-;
- ll t=;
- while((x&)==)
- {
- x>>=;
- t++;
- }
- srand(time(NULL));
- for(int i=;i<S;i++)
- {
- ll a=rand()%(n-)+; // 生成随机数 0<a<=n-1 去试试
- if(check(a,n,x,t))
- return false;
- }
- return true;
- }
Miller_Rabin算法_单个素数检测_启发式算法的更多相关文章
- miller_rabin算法检测生成大素数的RSA算法实现
import math from functools import reduce #用于合并字符 from os import urandom #系统随机的字符 import binascii # ...
- Miller-Rabin素数检测算法 acm模板
Miller-Rabin素数检测算法 其基于以下两个定理. Fermat小定理 若n是素数,则∀a(a̸≡0(modn))\forall a(a \not\equiv 0 \pmod{n})∀a(a̸ ...
- Miller Rabin素数检测与Pollard Rho算法
一些前置知识可以看一下我的联赛前数学知识 如何判断一个数是否为质数 方法一:试除法 扫描\(2\sim \sqrt{n}\)之间的所有整数,依次检查它们能否整除\(n\),若都不能整除,则\(n\)是 ...
- 数学:随机素数测试(Miller_Rabin算法)和求整数素因子(Pollard_rho算法)
POJ1811 给一个大数,判断是否是素数,如果不是素数,打印出它的最小质因数 随机素数测试(Miller_Rabin算法) 求整数素因子(Pollard_rho算法) 科技题 #include< ...
- 10^9以上素数判定,Miller_Rabin算法
#include<iostream> #include<cstdio> #include<ctime> #include<string.h> #incl ...
- mybatis3.1-[topic-18-20]-_映射文件_参数处理_单个参数&多个参数&命名参数 _POJO&Map&TO 三种方式及举例
笔记要点出错分析与总结 /**MyBatis_映射文件_参数处理_单个参数&多个参数&命名参数 * _POJO&Map&TO 三种方式及举例 _ * 单个参数 : #{ ...
- Miller_Rabin()算法素数判定 +ollard_rho 算法进行质因数分解
//****************************************************************// Miller_Rabin 算法进行素数测试//速度快,而且可以 ...
- 米勒罗宾素数检测(Miller-Rabin)
适用范围:较大数的较快素性判断 思路: 因为有好的文章讲解具体原理(见参考文章),这里只是把代码的大致思路点一下,读完了文章如果还有些迷糊,可以参考以下解释 原理是费马小定理:如果p是素数,则a^(p ...
- Nginx分时段限制下载速度解决方案(原创)_于堡舰_新浪博客
Nginx分时段限制下载速度解决方案(原创)_于堡舰_新浪博客 Nginx分时段限制下载速度解决方案(原创) (2011-03-02 16:40:49) 转载▼ 标签: ngi ...
随机推荐
- gulp-htmlmin 页面压缩插件 gulp插件 参数说明
gulpfile.js var gulp = require('gulp'), htmlmin = require('gulp-htmlmin'); gulp.task('testHtmlmin', ...
- Dubbo源码分析:Server
Server接口是开启一个socket服务.服务实现有netty,mina,grizzly的. 抽象时序图 获取NettyServer时序图 Transporter类图 Server 类图
- ipcs
用于报告Linux中进程间通信设施的状态,显示的信息包括消息列表.共享内存和信号量的信息
- CTS&&APIO2019爆零记
如果你只好奇测试相关请跳至day 2 day 3 day 6 scoi 2019 之后 由于实力问题,省选的时候排名在三十多,显然是没有进队.不过可能是受过的打击比较多,所以还没有特别颓废,甚至连 ...
- 如何学习uni-app?
uni-app 是一个使用 Vue.js 开发跨平台应用的前端框架. 开发者通过编写 Vue.js 代码,uni-app 将其编译到iOS.Android.微信小程序.H5等多个平台,保证其正确运行并 ...
- 树莓派基于scratch2控制GPIO
本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/raspberry_scratch2_gpio_control.m ...
- Win10远程连接自己的电脑提示“登陆没有成功”的解决方案
问题:提示登录没有成功 猜想: 1)要么是账号密码输入错误,必须是系统的用户名.密码 2)要么是配置问题,配置解决如下: 1.开启允许访问远程 找到此电脑-右键属性-高级系统设置-远程-勾选允许远程连 ...
- Detection of Glacier Calving Margins with Convolutional Neural Networks: A Case Study
利用Unet结构对landsat数据进行冰川裂缝提取,结构如下:训练集很小只有123张152*240图片
- mysql avg()函数,获取字段的平均值
mysql> select * from table1; +----------+------------+-----+---------------------+ | name_new | t ...
- Codeforces 839D Winter is here - 暴力 - 容斥原理
Winter is here at the North and the White Walkers are close. John Snow has an army consisting of n s ...