对一个大质数进行质因数分解 需要引用miller-robin来判素数

一直写的gcd居然挂掉了... 以后用__gcd了

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ull unsigned long long
#define lb long double
ll maxfac; inline ll ksc(ull x,ull y,ll p){//O(1)快速乘(防爆long long)
return (x*y-(ull)((lb)x/p*y)*p+p)%p;
} ll pow_mod(ll x, ll y, ll mod) {
ll res = 1;
while(y) {
if(y & 1) res = ksc(res, x, mod);
x = ksc(x, x, mod);
y >>= 1;
}
return res;
} ll ABS(ll x) {
if(x < 0) return -x;
return x;
} inline bool mr(ll x,ll p){//mille rabin判质数
if(pow_mod(x, p-1, p) != 1) return false;//费马小定理
ll y = p - 1, z;
while(!(y & 1)){ //二次探测
y >>= 1;
z = pow_mod(x, y, p);
if(z != 1 && z != p - 1) return false;
if(z == p - 1) return true;
}
return true;
} inline bool isprime(ll x) {
if(x < 2) return false;//mille rabin判质数
if(x == 2 || x == 3 || x == 5 || x==7 || x == 43) return true;
return mr(2, x) && mr(3, x) && mr(5, x) && mr(7, x) && mr(43, x);
} inline ll rho(ll p){//求出p的非平凡因子
ll x, y, z, c, g; int i, j;//先摆出来(z用来存(y-x)的乘积)
while(1){//保证一定求出一个因子来
y = x = rand() % p;//随机初始化
z = 1; c = rand() % p;//初始化
i = 0, j = 1;//倍增初始化
while(++i){//开始玄学生成
x = (ksc(x, x, p) + c) % p;//可能要用快速乘
z = ksc(z, ABS(y - x), p);//我们将每一次的(y-x)都累乘起来
if(x == y || !z) break;//如果跑完了环就再换一组试试(注意当z=0时,继续下去是没意义的)
if(!(i % 127) || i == j){//我们不仅在等127次之后gcd我们还会倍增的来gcd
g = __gcd(z, p);
if(g > 1) return g;
if(i == j) y = x ,j <<= 1;//维护倍增正确性,并判环(一箭双雕)
}
}
}
} inline void prho(ll p) {
if(p <= maxfac) return;
if(isprime(p)) {
maxfac = p;
return;
}
ll pi = rho(p);//我们一次必定能求的出一个因子,所以不用while
while(p % pi == 0) p /= pi;//记得要除尽
prho(pi); prho(p);
} int main() {
int T;
scanf("%d", &T);
srand(time(0));
while(T--) {
//srand(time(0));
ll x;
scanf("%lld", &x);
maxfac = 1;
if(isprime(x)) puts("Prime");
else {
prho(x);
printf("%lld\n", maxfac);
}
}
return 0;
}

P4718 [模板]Pollard-Rho算法的更多相关文章

  1. Pollard Rho算法浅谈

    Pollard Rho介绍 Pollard Rho算法是Pollard[1]在1975年[2]发明的一种将大整数因数分解的算法 其中Pollard来源于发明者Pollard的姓,Rho则来自内部伪随机 ...

  2. Pollard Rho 算法简介

    \(\text{update 2019.8.18}\) 由于本人将大部分精力花在了cnblogs上,而不是洛谷博客,评论区提出的一些问题直到今天才解决. 下面给出的Pollard Rho函数已给出散点 ...

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

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

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

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

  5. 初学Pollard Rho算法

    前言 \(Pollard\ Rho\)是一个著名的大数质因数分解算法,它的实现基于一个神奇的算法:\(MillerRabin\)素数测试(关于\(MillerRabin\),可以参考这篇博客:初学Mi ...

  6. 大整数分解质因数(Pollard rho算法)

    #include <iostream> #include <cstring> #include <cstdlib> #include <stdio.h> ...

  7. BZOJ 5330 Luogu P4607 [SDOI2018]反回文串 (莫比乌斯反演、Pollard Rho算法)

    题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=5330 (Luogu) https://www.luogu.org/prob ...

  8. 【快速因数分解】Pollard's Rho 算法

    Pollard-Rho 是一个很神奇的算法,用于在 $O(n^{\frac{1}4}) $的期望时间复杂度内计算合数 n 的某个非平凡因子(除了1和它本身以外能整除它的数).事书上给出的复杂度是 \( ...

  9. Miller-Rabin 素性测试 与 Pollard Rho 大整数分解

    \(\\\) Miller-Rabin 素性测试 考虑如何检验一个数字是否为素数. 经典的试除法复杂度 \(O(\sqrt N)\) 适用于询问 \(N\le 10^{16}\) 的时候. 如果我们要 ...

  10. Pollard Rho因子分解算法

    有一类问题,要求我们将一个正整数x,分解为两个非平凡因子(平凡因子为1与x)的乘积x=ab. 显然我们需要先检测x是否为素数(如果是素数将无解),可以使用Miller-Rabin算法来进行测试. Po ...

随机推荐

  1. 基于vue2.x的webpack升级与项目搭建指南--基础篇

    first thing fitrst 博主声明:绝对不当标题党 有人看最好不过的背景: 十月初对公司产品的前端构建做了一些优化,但还遗留了不少问题(可了解我的前一篇博文:一次webpack小规模优化经 ...

  2. C语言实现蛇形矩阵

    今天大一考试C语言的时候看见了这道题,下面是我转载的一个大佬的博客,自认为分析的很清楚,特来分享一下. **原文地址: https://blog.csdn.net/jack22333/article/ ...

  3. 【Linux】1、命令行及命令参数

    命令行及命令参数 文章目录 命令行及命令参数 1.命令行提示符 2.命令和命令参数 简单的命令 date ls 命令参数 短参数(一个字母) 长参数(多个字母) 参数的值 其它参数 3.小结 4.参考 ...

  4. 【Web】CSS实现鼠标悬停实现显示与隐藏 特效

    鼠标悬停实现显示与隐藏特效 简单记录 - 慕课网 Web前端 步骤四:鼠标悬停实现显示与隐藏特效 初步掌握定位的基本使用,以及CSS选择器更高级的运用,完成一个网页中必会的鼠标经过隐藏显示特效. 实现 ...

  5. maven打包项目

    使用maven可以对项目进行很方便的管理,方便体现之一便是项目的打包发布变得方便,本文主要是讲一下maven打包时的一些命令和注意事项(皆是自己从应用中总结的理解,或有不对之处). maven项目打包 ...

  6. apiAutoTest: 接口自动化测试的数据清洗(备份/恢复)处理方案

    接口自动化测试之数据清洗/隔离/备份/恢复 在得到QQ:1301559180 得代码贡献之后,想到了通过ssh连接上服务器,然后进行数据库备份,数据库恢复, 主要使用了 paramiko库 最终效果 ...

  7. js reduce数组转对象

    借鉴:https://juejin.im/post/5cfcaa7ae51d45109b01b161#comment这位大佬的处理方法很妙,但是我一眼看过去没有明白,细细琢磨了下,终于明白了 1 co ...

  8. Nginx架构赏析

    淘宝的某位大佬曾经做过测试,在一台24G内存的机器上,Nginx的最大并发连接数达到了200万.同学们听到这个结论后,是不是被Nginx的超高性能深深折服了,它内部的架构设计究竟是怎么样的呢?这篇文章 ...

  9. feign使用okHttpClient,调用原理

    最近项目中 spring cloud 用到http请求,使用feign,配置okhttp,打算配置一下就直接使用,不过在压测与调优过程中遇到一些没有预测到的问题,附上排查与解析结 yml.pom配置 ...

  10. 亿级用户下的新浪微博平台架构 前端机(提供 API 接口服务),队列机(处理上行业务逻辑,主要是数据写入),存储(mc、mysql、mcq、redis 、HBase等)

    https://mp.weixin.qq.com/s/f319mm6QsetwxntvSXpKxg 亿级用户下的新浪微博平台架构 炼数成金前沿推荐 2014-12-04 序言 新浪微博在2014年3月 ...