Miller_Rabin和Pollard_Rho算法 — 模板

自用模板

#include "bits/stdc++.h"
using namespace std;
#define ll long long
#define ull unsigned ll
#define pb push_back
const int RhoLimit = 10000; //最大循环,防止死掉
const int Rhoc = 12;        //随机数产生用的常数
vector<ll> Fac;//gcd
ll gcd(ll x, ll y)
{if (y == 0)return x;return gcd(y, x % y);
}
//mod防爆乘
ll qmul(ll a, ll b, ll mod)
{ll res = 0;while (b){if (b & 1)res = (res + a) % mod;a = (a + a) % mod;b >>= 1;}return res;
}
//防爆快速幂
ll qpow(ll a, ll n, ll mod)
{ll res = 1;while (n){if (n & 1)res = qmul(res, a, mod);a = qmul(a, a, mod);n >>= 1;}return res;
}
//判断Pollard-Rho猜出来的最大质因数是不是质数
bool Miller_Rabin(ll n)
{if (n == 2)return 1;if (n < 2 || !(n & 1))return 0;ll m = n - 1, k = 0; //n-1 = 2^k + mwhile (!(m & 1)){k++;m >>= 1;}int prime[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 53};for (int i = 0; i < 14; i++){ll a = prime[i] % (n - 1) + 1;ll x = qpow(a, m, n);ll y;for (int j = 1; j <= k; j++){y = qmul(x, x, n);if (y == 1 && x != 1 && x != n - 1)return false;x = y;}if (y != 1)return false;}return true;
}
//生成随机数
ll rand_(ll x)
{ull p = rand() * rand();p *= rand() * rand();p += rand();return p % x;
}
//
ll Pollard_Rho(ll n)
{ll x = rand_(n - 2) + 2;ll y = x;int step = 2;for (int i = 1;; i++){x = qmul(x, x, n) + Rhoc;if (x >= n)x -= n;if (x == y)return -1;ll d = gcd(abs(x - y), n);if (d > 1)return d;if (i == step){i = 0;y = x;step <<= 1;}}
}void solve(ll n)
{if (Miller_Rabin(n)){Fac.pb(n);return;}ll p;for (int i = 0; i != RhoLimit; ++i){p = Pollard_Rho(n);if (p != -1)break;}if (p == -1)return;solve(p);solve(n / p);
}int main()
{ll t;while (cin >> t){solve(t);sort(Fac.begin(), Fac.end());for (auto i : Fac)cout << i << " ";cout << endl;Fac.clear();}return 0;
}

2020.7.6 -- Miller_Rabin和Pollard_Rho算法相关推荐

  1. Miller_Rabin和Pollard_Rho算法

    Miller_Rabin和Pollard_Rho算法 SemiWaker 一直觉得随机化不稳定就没学. Miller_Rabin 目的:判质数. 当然,不是随机一个数然后去模,随机一个数去模正确率太低 ...

  2. Pollard_rho算法+Miller_Rabin算法(大素数的判断与素因子分解)(模板)

    const int S=20;//随机算法判定次数,S越大,判错概率越小 //计算 (a*b)%c. a,b都是long long的数,直接相乘可能溢出的 // a,b,c <2^63 LL m ...

  3. Miller_Rabbin算法判断大素数,Pollard_rho算法进行质因素分解

    Miller-rabin算法是一个用来快速判断一个正整数是否为素数的算法.它利用了费马小定理,即:如果p是质数,且a,p互质,那么a^(p-1) mod p恒等于1.也就是对于所有小于p的正整数a来说 ...

  4. [数论] Miller_Rabbin算法判断大素数,Pollard_rho算法进行质因素分解

    讲解转载于:http://www.cnblogs.com/rainydays/archive/2011/09/01/2162049.html   http://blog.sina.com.cn/s/b ...

  5. 大数因数分解Pollard_rho 算法详解

    大数因数分解Pollard_rho 算法详解 适用范围:给你一个大数n,将它分解它的质因子的乘积的形式. P.S. 在下面的论述中会使用到Miller_rabin和快速乘法和快速幂,如果有兴趣请看另一 ...

  6. 总奖金64万!含吸烟打电话检测、车道线识别等,2020中国华录杯·数据湖算法大赛火热进行中!...

    ●赛题背景● 以"数据驱动创新,赋能智慧城市"为主题的2020中国华录杯·数据湖算法大赛,围绕"华录数据湖+智慧城市"的核心理念,着力于智慧城市业务中的真实应用 ...

  7. 吸烟打电话检测、车道线识别等,2020中国华录杯·数据湖算法大赛火热进行中!...

    ●赛题背景● 随着互联网的高速发展,"万物数据化"浪潮奔腾而来.数据湖围绕数据的全生命周期管理打造新一代数字基础设施,在硬件层面构筑了高性能.低成本.智能化.高安全的数字经济底座, ...

  8. HDU6608 Fansblog【Miller_Rabin素性测试算法+威尔逊定理】

    Fansblog Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Subm ...

  9. 2020年面试后端必会算法记录

    2020年面试后端必会算法记录 C++面试集合 十大排序算法 数组排序&&链表排序 快速排序的递归实现 快速排序的非递归实现 两个栈实现一个队列(虾皮笔试) 两个队列实现一个栈 二叉树 ...

最新文章

  1. 64位环境编译DiskSim 4.0
  2. sysname数据类型是什么
  3. 使用osql.exe, 将Select的内容保存为文件
  4. MATLAB Simulink 做BP PID报错:Error :*** during flag=* call must be a real vector of length 3
  5. JavaWeb 入门篇(3)ServletContext 详解 具体应用
  6. 2018年东北农业大学春季校赛 F wyh的集合【思维】
  7. sublime text3支持Vue语法高亮显示步骤(转)
  8. react动画库_React 2020动画库
  9. [MySQL] 分组排序取前N条记录以及生成自动数字序列,类似group by后 limit
  10. 【二分】Distinct
  11. lock.lock_HibernateCascadeType.LOCK陷阱
  12. c语言中的所有关键字,C语言中的32个关键字
  13. Java基础 HashMap的添加 修改 遍历 Map.Entry Map.entrySet()的使用及实例
  14. PAT (Basic Level) Practice (中文)1041 考试座位号 (15 分)
  15. 公布几个流氓软件分析报告——哇哇资讯精灵
  16. 西门子45亿美元转型,“卖冰箱”到“卖VR”
  17. GPU服务器硬件及软件
  18. Windows下使用C++(Win32SDK)编程无需提权读取硬盘序列号(XP、Win7和Win10都可用)
  19. EasyRecovery帮你一招找回网易云下载的单曲
  20. 焦化厂集气管压力优化调节技术

热门文章

  1. 【权威发布】360天眼实验室:Xshell被植入后门代码事件分析报告(完整版)
  2. postman接口测试响应体出错显示HTML网页的问题
  3. 暑期实训项目(2)--推特爬虫数据处理
  4. base64加密和解密(动态密钥)
  5. HDU 1984 ZOJ 2987 Misspelling(模拟)
  6. 互联网日报 | 全国版消费券今日起开抢;微信搜一搜正式开放服务搜索接入;高德打车上线“考生专车”服务...
  7. 转载 禁止ie浏览器打开
  8. 将灰度图与深度图合成彩图
  9. anaconda环境配置pytorch总结,GPU调用失败方法总结
  10. win10右键卡顿原因_win10系统右键卡顿的解决方法