Miller-Rabin & Pollard-rho

很久之前就学过了...今天重学一遍


利用费马小定理,但不能判断伪素数的情况

基于a的伪素数n:

\(a^{n-1} \equiv 1 \pmod n\)

如果对于所有与n互质的数都成立,则n为Carmichael数




定理:

对于质数\(p\)和\(e \ge 1\)

\[x^2 \equiv 1 \pmod p^e
\]

只有两个解\(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]【学习笔记】的更多相关文章

  1. 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 这 ...

  2. POJ1811- Prime Test(Miller–Rabin+Pollard's rho)

    题目大意 给你一个非常大的整数,判断它是不是素数,如果不是则输出它的最小的因子 题解 看了一整天<初等数论及其应用>相关部分,终于把Miller–Rabin和Pollard's rho这两 ...

  3. 数学基础IV 欧拉函数 Miller Rabin Pollard's rho 欧拉定理 行列式

    找了一些曾经没提到的算法.这应该是数学基础系最后一篇. 曾经的文章: 数学基础I 莫比乌斯反演I 莫比乌斯反演II 数学基础II 生成函数 数学基础III 博弈论 容斥原理(hidden) 线性基(h ...

  4. poj 1811 Pallor Rho +Miller Rabin

    /* 题目:给出一个数 如果是prime 输出prime 否则输出他的最小质因子 Miller Rabin +Poller Rho 大素数判定+大数找质因子 后面这个算法嘛 基于Birthday Pa ...

  5. Pollard rho算法+Miller Rabin算法 BZOJ 3668 Rabin-Miller算法

    BZOJ 3667: Rabin-Miller算法 Time Limit: 60 Sec  Memory Limit: 512 MBSubmit: 1044  Solved: 322[Submit][ ...

  6. Miller Rabin素数检测与Pollard Rho算法

    一些前置知识可以看一下我的联赛前数学知识 如何判断一个数是否为质数 方法一:试除法 扫描\(2\sim \sqrt{n}\)之间的所有整数,依次检查它们能否整除\(n\),若都不能整除,则\(n\)是 ...

  7. HDU 3864 D_num Miller Rabin 质数推断+Pollard Rho大整数分解

    链接:http://acm.hdu.edu.cn/showproblem.php? pid=3864 题意:给出一个数N(1<=N<10^18).假设N仅仅有四个约数.就输出除1外的三个约 ...

  8. Miller Rabin算法学习笔记

    定义: Miller Rabin算法是一个随机化素数测试算法,作用是判断一个数是否是素数,且只要你脸不黑以及常数不要巨大一般来讲都比\(O(\sqrt n)\)的朴素做法更快. 定理: Miller ...

  9. POJ1811_Prime Test【Miller Rabin素数测试】【Pollar Rho整数分解】

    Prime Test Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 29193 Accepted: 7392 Case Time ...

  10. POJ2429_GCD &amp; LCM Inverse【Miller Rabin素数測试】【Pollar Rho整数分解】

    GCD & LCM Inverse Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9756Accepted: 1819 ...

随机推荐

  1. CentOS 6.5 搭建 Zabbix

    CentOS 6.5 搭建 Zabbix 说明: 操作系统:CentOS 6.5 IP地址:192.168.21.127 Web环境:Nginx+MySQL+PHP zabbix版本:Zabbix 2 ...

  2. setTimeout()方法,你真的懂吗?

    今天在群里看到了一道经典的javascript题型,之前也遇到过,可是再次遇到时,还是做错,还是不理解,因此这里来做个笔记吧! 不说了,直接上代码吧 for(var i=1; i<=9; i++ ...

  3. Spark高可用集群搭建

    Spark高可用集群搭建 node1    node2    node3   1.node1修改spark-env.sh,注释掉hadoop(就不用开启Hadoop集群了),添加如下语句 export ...

  4. 从零开始学习前端JAVASCRIPT — 3、JavaScript基础string字符串介绍

    1:字符串 JS中的任何数据类型都可以当作对象来看.所以string既是基本数据类型,又是对象. 2:声明字符串 基本数据类型:var sStr = '字符串'; 对象的方法:var oStr = n ...

  5. es6语法部分浏览器支持引发的坑

    es2015部分浏览器支持踩的坑 自从es2015出现以来,以其更丰富的api和简介的语法,使得js功能越来越丰富写起来也更便捷.比较早先的时候,浏览器是完全不支持的,我们使用的时候,必须要使用bab ...

  6. CSS3 background-size 属性

    定义和用法 background-size 属性规定背景图像的尺寸. 默认值: auto 继承性: no 版本: CSS3 JavaScript 语法: object.style.background ...

  7. SSL协议之数据加密过程详解

    前言 总括: 原文博客地址:SSL协议之数据加密过程详解 知乎专栏&&简书专题:前端进击者(知乎)&&前端进击者(简书) 博主博客地址:Damonare的个人博客 生活 ...

  8. python判断两个list包含关系

    a = [1,2] b = [1,2,3] c = [0, 1] set(b) > set(a) set(b) > set(c)

  9. django url路由参数错误

    出现错误: TypeError get() got an unexpected keyword argument 'teacher_id 出错原因: view类中,get方法获得了一个多余的额参数,这 ...

  10. Git: 本地创建版本库用于多处同步

    问题背景 目前有一个 Android 和 一个 iOS 项目,两个项目底层使用相同的 C++ 代码.由于在开发迭代中代码时常更新,而且往往是今天 Android 部分修改一小部分,明天 iOS 部分修 ...