博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Pollard_rho 因数分解
阅读量:6583 次
发布时间:2019-06-24

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

选取随机数\(a\) 随机数\(b\),检查\(gcd(a - b, n)\)是否大于1,若大于1则\(a - b\)\(n\)的一个因数

实现1:floyd判环

利用多项式\(f(x)\)迭代出\({x_0, x_1, \dots, x_k}\)

设定\(x = y = x_0\)的初始值,选用多项式进行迭代,每次:\(x = f(x)\), \(y = f(f(y))\),即:\(x = x_k, y = x_{2k}\)\(x == y\)时出现循环

\(x = y = 2\)\(f(n) = n^2 + a\)

typedef long long ll;ll mul_mod(ll a, ll b, ll m){    ll ans = 0, exp = a;    while(a >= m) a -= m;    while(b){        if(b & 1){            ans += exp;            while(ans >= m) ans -= m;        }        exp += exp;        while(exp >= m) exp -= m;        b >>= 1;    }    return ans;}ll pollard_rho(ll n, int a){    ll x = 2, y = 2, d = 1;    while(d == 1){        x = mul_mod(x, x, n) + a;        y = mul_mod(y, y, n) + a;        y = mul_mod(y, y, n) + a;        d = __gcd((x >= y ? x - y : y - x), n);    }    if(d == n) return pollard_rho(n, a + 1);    return d;}

实现2: brent判环(更高效)

不同于floyd每次计算\(x_k, x_{2k}\)进行判断,brent每次只计算\(x_k\),当k是2的方幂时,\(y = x_k\),每次计算\(d = gcd(x_k - y, n)\)

typedef long long ll;ll mul_mod(ll a, ll b, ll m){    ll ans = 0, exp = a;    while(a >= m) a -= m;    while(b){        if(b & 1){            ans += exp;            while(ans >= m) ans -= m;        }        exp += exp;        while(exp >= m) exp -= m;        b >>= 1;    }    return ans;}ll pollard_rho(ll n, int a){    ll x = 2, y = 2, d = 1, k = 0, i = 1;    while(d == 1){        ++k;        x = mul_mod(x, x, n) + a;        d = __gcd(x >= y ? x - y : y - x, n);        if(k == i){            y = x;            i <<= 1;        }    }    if(d == n) return pollard_rho(n, a + 1);    return d;}

转载于:https://www.cnblogs.com/book-book/p/6349362.html

你可能感兴趣的文章
css3 animate 和关键帧 @-webkit-keyframes
查看>>
文字链接颜色设置
查看>>
图片转流
查看>>
ubunto应用软件
查看>>
HTML 标签说明
查看>>
锋利的jQuery-2--判断jQuery获取到的对象是否存在$().length
查看>>
linux 查询系统版本命令、查询端口号是否被占用命令
查看>>
java笔记八:IO流之字符流与字符缓冲流
查看>>
Docker 命令收集
查看>>
myeclipse注册码生成器
查看>>
iOS App间相互跳转漫谈 part2
查看>>
ISCC2014 writeup
查看>>
Kotlin 知识梳理(1) Kotlin 基础
查看>>
js正则表达式
查看>>
iOS socket通信,编解码,浮点型数据解析
查看>>
前端基础15:JS作用域基础
查看>>
BATJ面试必会之 Spring 篇(一)
查看>>
什么是企业内训
查看>>
H3C设备之OSPF DR选举
查看>>
List grantee right in oracle
查看>>