[Miller-Rabin & Pollard-rho]【学习笔记】
Miller-Rabin & Pollard-rho
很久之前就学过了...今天重学一遍
利用费马小定理,但不能判断伪素数的情况
基于a的伪素数n:
\(a^{n-1} \equiv 1 \pmod n\)
如果对于所有与n互质的数都成立,则n为Carmichael数
定理:
对于质数\(p\)和\(e \ge 1\)
\]
只有两个解\(x=1,\ x=-1\)
分解$n=u*2^t$,反复平方的时候如果存在非平凡平方根则不是质数
可以证明Carmicheal数一定不是$p^e$
Pollard-rho启发式因子分解期望$O(\sqrt{p})$找到一个为p的质因子
快速乘要用long double黑科技
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
inline ll read(){
char c=getchar();ll x=0,f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
ll n;
ll Mul(ll a, ll b, ll P) {
ll t = (a*b - (ll)((long double)a/P*b+1e-8)*P);
return t<0 ? t+P : t;
}
ll Pow(ll a, ll b, ll P) {
ll ans=1; a%=P;
for(; b; b>>=1, a=Mul(a, a, P))
if(b&1) ans=Mul(ans, a, P);
return ans;
}
bool witness(ll a, ll n, ll u, int t) {
ll x=Pow(a, u, n), y=x;
for(int i=1; i<=t; i++) {
x=Mul(x, x, n);
if(x==1 && y!=1 && y!=n-1) return true;
y=x;
}
return x!=1;
}
bool MillerRabin(ll n) {
if(n==2) return true;
if(n<=1 || !(n&1)) return false;
ll u=n-1, t=0;
while(!(u&1)) u>>=1, t++;
for(int i=1; i<=10; i++)
if(witness(rand()%(n-1)+1, n, u, t)) return false;
return true;
}
ll gcd(ll a, ll b) {return b==0?a:gcd(b, a%b);}
ll rho(ll n, ll c) {
int k=2; ll x=rand()%n, y=x, d=1;
for(int i=1; d==1; i++) {
x=(Mul(x,x,n)+c)%n;
d=gcd(n, y>x?y-x:x-y);
if(i==k) y=x, k<<=1;
}
return d;
}
ll Max;
void solve(ll n) {
if(n==1) return;
if(MillerRabin(n)) {Max=max(Max, n); return;}
ll t=n;
while(t==n) t=rho(n, rand()%(n-1)+1);
solve(t); solve(n/t);
}
int main() {
freopen("in","r",stdin);
srand(317);
int T=read();
while(T--) {
n=read();
Max=0;
solve(n);
if(Max==n) puts("Prime");
else printf("%lld\n",Max);
}
}
[Miller-Rabin & Pollard-rho]【学习笔记】的更多相关文章
- POJ2429 - GCD & LCM Inverse(Miller–Rabin+Pollard's rho)
题目大意 给定两个数a,b的GCD和LCM,要求你求出a+b最小的a,b 题解 GCD(a,b)=G GCD(a/G,b/G)=1 LCM(a/G,b/G)=a/G*b/G=a*b/G^2=L/G 这 ...
- POJ1811- Prime Test(Miller–Rabin+Pollard's rho)
题目大意 给你一个非常大的整数,判断它是不是素数,如果不是则输出它的最小的因子 题解 看了一整天<初等数论及其应用>相关部分,终于把Miller–Rabin和Pollard's rho这两 ...
- 数学基础IV 欧拉函数 Miller Rabin Pollard's rho 欧拉定理 行列式
找了一些曾经没提到的算法.这应该是数学基础系最后一篇. 曾经的文章: 数学基础I 莫比乌斯反演I 莫比乌斯反演II 数学基础II 生成函数 数学基础III 博弈论 容斥原理(hidden) 线性基(h ...
- poj 1811 Pallor Rho +Miller Rabin
/* 题目:给出一个数 如果是prime 输出prime 否则输出他的最小质因子 Miller Rabin +Poller Rho 大素数判定+大数找质因子 后面这个算法嘛 基于Birthday Pa ...
- Pollard rho算法+Miller Rabin算法 BZOJ 3668 Rabin-Miller算法
BZOJ 3667: Rabin-Miller算法 Time Limit: 60 Sec Memory Limit: 512 MBSubmit: 1044 Solved: 322[Submit][ ...
- Miller Rabin素数检测与Pollard Rho算法
一些前置知识可以看一下我的联赛前数学知识 如何判断一个数是否为质数 方法一:试除法 扫描\(2\sim \sqrt{n}\)之间的所有整数,依次检查它们能否整除\(n\),若都不能整除,则\(n\)是 ...
- HDU 3864 D_num Miller Rabin 质数推断+Pollard Rho大整数分解
链接:http://acm.hdu.edu.cn/showproblem.php? pid=3864 题意:给出一个数N(1<=N<10^18).假设N仅仅有四个约数.就输出除1外的三个约 ...
- Miller Rabin算法学习笔记
定义: Miller Rabin算法是一个随机化素数测试算法,作用是判断一个数是否是素数,且只要你脸不黑以及常数不要巨大一般来讲都比\(O(\sqrt n)\)的朴素做法更快. 定理: Miller ...
- POJ1811_Prime Test【Miller Rabin素数测试】【Pollar Rho整数分解】
Prime Test Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 29193 Accepted: 7392 Case Time ...
- POJ2429_GCD & LCM Inverse【Miller Rabin素数測试】【Pollar Rho整数分解】
GCD & LCM Inverse Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9756Accepted: 1819 ...
随机推荐
- 记忆化搜索 dp学习~2
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1331 Function Run Fun Time Limit: 2000/1000 MS (Java/ ...
- LuceneNet 实现快速大文件大数据查询
做过站内搜索的朋友应该对Lucene.Net不陌生,因为用普通的sql like查询肯定是不行的,太慢了. 首先说明的是--Lucene.Net只是一个全文检索开发包,不是一个成型的搜索引擎, 它的 ...
- Kubernetes存储之Persistent Volumes简介
简介 管理存储和管理计算有着明显的不同.PersistentVolume子系统给用户和管理员提供了一套API,从而抽象出存储是如何提供和消耗的细节.在这里,我们介绍两种新的API资源:Persiste ...
- 2017-6-14 踩坑小结(Android文件读写 相关问题)
填坑 getSlotFromBufferLocked: unknown buffer: 0xab7115e0 1. 在棉花糖(6.0)上莫名出现 未知缓冲 错误,百度了一下,貌似这个是Android6 ...
- Spark_总结一
Spark_总结一 1.Spark介绍 1.1什么是Spark? Apache Spark是一个开源的集群计算框架,使数据计算更快(高效运行,快速开发) 1.2Spa ...
- 虚拟主机、VPS以及云主机的区别和对比
对于很多需要建网站的朋友来说,虚拟主机是必须要了解的基础知识.虚拟主机相对于VPS与云主机来说出现的较早,也是被大多数站长所了解的主机.很多人容易将这三者混淆,弄不清楚三者的联系与区别.那么虚拟主机. ...
- NV12格式转RGB的CUDA实现
NV12格式是yuv420格式的一种,NV12格式的u,v排布顺序为交错排布,假如一幅图像尺寸为W*H,则先Y分量有W*H个,然后U分量和V分量交错排布,U分量和V分量各有W*H/4个,U,V加起来总 ...
- (Release Candidate)Candidate
RC:(Release Candidate)Candidate是候选人的意思,用在软件或者操作系统上就是候选版本
- 2017-06-20 (pwd ls cd)
pwd pwd 显示当前所在的位置 pwd -P 如果是链接文件,显示链接文件所指的位置 ls ls 查询目录中的内容 ls -a 显示所有的文件,包含隐藏的文件 -l 显示详细的信息 ...
- CentOS如何把deb转为rpm
说明:可以转换,但不一定可用,可以根据报错提示,安装需要的依赖. 1 安装alien工具,下载地址http://ftp.de.debian.org/debian/pool/main/a/alien/ ...