模板题Pollard_Rho大数分解 A - Prime Test POJ - 1811
题意:是素数就输出Prime,不是就输出最小因子.
#include <cstdio>
#include<time.h>
#include <algorithm>
#include<set>
using namespace std; typedef long long llt; int const Repeat = ;
set<llt>sss;
//利用二进制计算a*b%mod
llt multiMod(llt a, llt b, llt mod){
llt ret = 0LL;
a %= mod;
while (b){
if (b & 1LL) ret = (ret + a) % mod, --b;
b >>= 1LL;
a = (a + a) % mod;
}
return ret;
} //计算a^b%mod
llt powerMod(llt a, llt b, llt mod){
llt ret = 1LL;
a %= mod;
while (b){
if (b & 1LL) ret = multiMod(ret, a, mod), --b;
b >>= 1LL;
a = multiMod(a, a, mod);
}
return ret;
} //Miller-Rabin测试,测试n是否为素数
bool Miller_Rabin(llt n, int repeat){
if (2LL == n || 3LL == n) return true;
if (!(n & 1LL)) return false; //将n分解为2^s*d
llt d = n - 1LL;
int s = ;
while (!(d & 1LL)) ++s, d >>= 1LL; //srand((unsigned)time(0));
for (int i = ; i<repeat; ++i){//重复repeat次
llt a = rand() % (n - ) + ;//取一个随机数,[2,n-1)
llt x = powerMod(a, d, n);
llt y = 0LL;
for (int j = ; j<s; ++j){
y = multiMod(x, x, n);
if (1LL == y && 1LL != x && n - 1LL != x) return false;
x = y;
}
if (1LL != y) return false;
}
return true;
} llt Fac[];//质因数分解结果(刚返回时是无序的)
int FCnt;//质因数的个数。数组小标从0开始 llt gcd(llt a, llt b){
if (0L == a || 0L == b) return ;
if (a < ) a = -a;
if (b < ) b = -b;
while (b){
llt t = a % b;
a = b;
b = t;
}
return a;
}
llt Pollard_Rho(llt n, llt c){
llt i = , k = ;
llt x = rand() % n;
llt y = x;
while (){
++i;
x = (multiMod(x, x, n) + c) % n;
llt d = gcd(y - x, n);
if (d != 1LL && d != n) return d;
if (y == x) return n;
if (i == k) y = x, k <<= ;
}
} void find(llt n){
if (4LL == n){
Fac[] = Fac[] = 2LL;
FCnt = ;
return;
}
if (Miller_Rabin(n, Repeat)){
Fac[FCnt++] = n;
return;
} llt p;
while ((p = Pollard_Rho(n, rand() % (n - ) + )) == n); find(p);
find(n / p);
} int main(){
int kase;
scanf("%d", &kase);
while (kase--){
llt n;
scanf("%lld", &n); FCnt = ;
if (Miller_Rabin(n, )){ printf("Prime\n"); }
else{
find(n);
llt ans = Fac[];
for (int i = ; i < FCnt;++i)
if (ans>Fac[i])ans = Fac[i];
printf("%lld\n", ans);
}
}
return ;
}
模板题Pollard_Rho大数分解 A - Prime Test POJ - 1811的更多相关文章
- Pollard_Rho大数分解模板题 pku-2191
题意:给你一个数n, 定义m=2k-1, {k|1<=k<=n},并且 k为素数; 当m为合数时,求分解为质因数,输出格式如下:47 * 178481 = 8388607 = ( ...
- Prime Test(POJ 1811)
素数判定的模板题,运用米勒-罗宾素数判定,然后用Pollard_Rho法求出质因数.使用相应的模板即可,不过注意存储质因子的数组需要使用vector,并且使用long long类型存储,不然存储不下, ...
- poj 2429 Pollard_rho大数分解
先对lcm/gcd进行分解,问题转变为从因子中选出一些数相乘,剩下的数也相乘,要求和最小. 这里能够直接搜索,注意一个问题,因为同样因子不能分配给两边(会改变gcd)所以能够将同样因子合并,这种话,搜 ...
- poj 1811 随机素数和大数分解(模板)
Sample Input 2 5 10 Sample Output Prime 2 模板学习: 判断是否是素数,数据很大,所以用miller,不是的话再用pollard rho分解 miller : ...
- POJ 1258 Agri-Net 【Prime】模板题
题目链接>>> 题目大意: 给你N*N矩阵,表示N个村庄之间的距离.FJ要把N个村庄全都连接起来,求连接的最短距离(即求最小生成树).解析如下: #include <c ...
- [POJ2104] 区间第k大数 [区间第k大数,可持久化线段树模板题]
可持久化线段树模板题. #include <iostream> #include <algorithm> #include <cstdio> #include &l ...
- 51nod 1028 大数乘法 V2 【FFT模板题】
题目链接 模板题.. #include<bits/stdc++.h> using namespace std; typedef int LL; typedef double db; nam ...
- 数学#素数判定Miller_Rabin+大数因数分解Pollard_rho算法 POJ 1811&2429
素数判定Miller_Rabin算法详解: http://blog.csdn.net/maxichu/article/details/45458569 大数因数分解Pollard_rho算法详解: h ...
- POJ 1811 Prime Test (Pollard rho 大整数分解)
题意:给出一个N,若N为素数,输出Prime.若为合数,输出最小的素因子.思路:Pollard rho大整数分解,模板题 #include <iostream> #include < ...
随机推荐
- 使用GitHub搭建个人博客
博客已经从博客园慢慢搬到GitHub 上,可能在博客园上显示不是很规整,可以移步到另外的一个上面看 Blog 两边博客同时更新. 欢迎各位star 和 follower 搭建过程 在搭建博客时候也踩 ...
- C# 中的集合(Array/ArrayList/List<T>/HashTable/Dictionary)
int [] numbers = new int[5]; // 长度为5,元素类型为 int.string[,] names = new string[5,4]; // 5*4 的二维数组byte[] ...
- Java 雇员管理小练习(理解面向对象编程)
在学习集合框架的时候,初学者很容易练习到学生管理系统.雇员管理体统等练习题.在学习集合框架之前,基本上Java基本语法都学完了,集合框架也从侧面的检验对前面学习的理解.下面用一个曾经做过的练习题,回顾 ...
- 基于Zookeeper的分布式锁
实现分布式锁目前有三种流行方案,分别为基于数据库.Redis.Zookeeper的方案,其中前两种方案网络上有很多资料可以参考,本文不做展开.我们来看下使用Zookeeper如何实现分布式锁. 什么是 ...
- 自定义基于jquery竖向瀑布流插件
公司新项目做了一个关于图片的板块,网上找了一些瀑布流插件都不是很适合自己,于是就自己造轮子写一个,并封装成插件github 于是就想分享一下,主要是为了更好的学习与记忆. 如果大家进来了,希望能给我g ...
- php soapclient 超时 设置
用php的soapclient,默认是60秒.可在php.ini里配置, 重启APache 或者在PHP代码里做设置 ini_set('default_socket_timeout', 300);// ...
- 【读书笔记】iOS-处理内存警告
-(void)didReceiveMemoryWarning{ [super didReceiveMemoryWarning]; } 在这里你需要释放掉所有占用了很大内存的对象,如果你忽略了这个警告, ...
- 【转】PHP 杂谈 坑爹的file_exists
转自:http://www.cnblogs.com/baochuan/archive/2012/05/06/2445822.html 介绍 我发现了一个问题,今天与大家分享.我把整个过程描述一下. ...
- Oracle 11gR2_database在Linux下的安装
Oracle 11gR2_database在Linux下的安装 by:授客 QQ:1033553122 由于篇幅问题,采用链接分享的形式,烦请复制以下网址,黏贴到浏览器中打开,下载 http://pa ...
- windows下安装Erlang
由于RabbitMQ是用Erlang编写的,因此需要先安装Erlang环境,建议安装的版本新一点.下载地址点我试试 我这里下载的V20.3 x64版本,下载后点击开始安装,基本是一路next(默认设置 ...