//POJ 1811
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <time.h> using namespace std; typedef __int64 lld; lld ran() {
return rand() << 16 | rand();
} lld gcd(lld a, lld b) {
return !b ? a : gcd(b, a % b);
}
inline void add(lld &x, lld ad, lld mod) {
x += ad;
if (x >= mod) x -= mod;
}
lld mul_mod(lld a, lld b, lld mod) {
lld ret = 0;
while (b) {
if (b & 1) {
add(ret, a, mod);
}
b >>= 1; add(a, a, mod);
}
return ret;
}
lld pow_mod(lld x, lld n, lld mod) {
lld ret = 1 % mod;
while (n) {
if (n & 1) {
ret = mul_mod(ret, x, mod);
}
n >>= 1; x = mul_mod(x, x, mod);
}
return ret;
}
bool test(lld n, lld b) {
lld m = n - 1;
int counter = 0;
while (~m & 1) {
m >>= 1;
counter ++;
}
lld ret = pow_mod(b, m, n);
if (ret == 1 || ret == n - 1) {
return true;
}
counter --;
while (counter >= 0) {
ret = mul_mod(ret, ret, n);
if (ret == n - 1) {
return true;
}
counter --;
}
return false;
}
const int BASE[12] = {2,3,5,7,11,13,17,19,23,29,31,37};
bool is_prime(lld n) {
if (n < 2) {
return false;
}
if (n < 4) {
return true;
}
if (n == 3215031751LL) {
return false;
}
for (int i = 0; i < 12 && BASE[i] < n; i++) {
if (!test(n, BASE[i])) {
return false;
}
}
return true;
}
lld pollard_rho(lld n, lld seed) {
lld x, y, head = 1, tail = 2;
x = y = ran() % (n - 1) + 1;
while (true) {
x = mul_mod(x, x, n);
add(x, seed, n);
if (x == y) {
return n;
}
lld d = gcd(x > y ? x - y : y - x, n);
if (1 < d && d < n) {
return d;
}
head ++;
if (head == tail) {
y = x;
tail <<= 1;
}
}
}
vector <lld> divisors;
void factorize(lld n) {
if (n > 1) {
if (is_prime(n)) {
divisors.push_back(n);
}else {
lld d = n;
while (d >= n) {
d = pollard_rho(n, ran() % (n - 1) + 1);
}
factorize(n / d);
factorize(d);
}
}
} int main() {
//srand(time(NULL));
int T;
scanf("%d", &T);
for (int cas = 1; cas <= T; cas++) {
lld x;
scanf("%I64d", &x);
if (is_prime(x)) {
printf("Prime\n");
}else {
divisors.clear();
factorize(x);
sort(divisors.begin(), divisors.end());
printf("%I64d\n", divisors[0]);
}
}
return 0;
}

  

分解大质数模板(复杂度小于sqrt(n))的更多相关文章

  1. 统计无向图中三角形的个数,复杂度m*sqrt(m).

    统计无向图中三角形的个数,复杂度m*sqrt(m). #include<stdio.h> #include<vector> #include<set> #inclu ...

  2. 素数筛 codevs 1675 大质数 2

    1675 大质数 2  时间限制: 1 s  空间限制: 1000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 小明因为没做作业而被数学 ...

  3. codevs——1530 大质数

    1530 大质数  时间限制: 1 s  空间限制: 1000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 小明因为没做作业而被数学老师罚站,之后数学老师 ...

  4. codevs——1675 大质数 2

    1675 大质数 2  时间限制: 1 s  空间限制: 1000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 小明因为没做作业而被数学老师罚站,之 ...

  5. [hdu5351]找规律,大整数模板

    题意:f(1)="a",f(2)="b",f(i)=f(i-1)+f(i-2),"+"表示连接符.给定n,m,求f(n)的前m个字符的“ne ...

  6. Pollard Rho大质数分解学习笔记

    目录 问题 流程 代码 生日悖论 end 问题 给定n,要求对n质因数分解 普通的试除法已经不能应用于大整数了,我们需要更快的算法 流程 大概就是找出\(n=c*d\) 如果\(c\)是素数,结束,不 ...

  7. codevs 2530大质数

    链接:http://codevs.cn/problem/1530/ 解题思路: 这个题最关键的剪枝还是 因子小于平方根,但不是像原来那样用. 逆转思维,与其说判断哪些是质数,不如说判断哪些不是质数,更 ...

  8. 湖南省第八届大学生程序设计大赛原题 D - 平方根大搜索 UVA 12505 - Searching in sqrt(n)

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=30746#problem/D D - 平方根大搜索 UVA12505 - Searchin ...

  9. 4招搞定项目年终总结,还有9大PPT模板免费送

    作为一名合格的项目经理 一到年末,我们的头等大事就来了 那就是写项目年终总结和计划 但是………初入这行的项目经理有点犯难,因为 不 会 写   不用怕,小编送你年终总结秘籍和好看的PPT模板 先来看秘 ...

随机推荐

  1. JSONArray的使用

    用的是fastjson.jar包 1. jsonarray,jsonobject 使用正确代码如下:(这种getJSONObject 函数形成jsonobj 的方式非常好,可以避免循环引用或jsono ...

  2. A.Kaw矩阵代数初步学习笔记 7. LU Decomposition

    “矩阵代数初步”(Introduction to MATRIX ALGEBRA)课程由Prof. A.K.Kaw(University of South Florida)设计并讲授. PDF格式学习笔 ...

  3. PHP ServerPush (推送) 技术的探讨

    2016年11月29日17:51:03 转自:http://www.cnblogs.com/hnrainll/archive/2013/05/07/3064874.html 需求: 我想做个会员站内通 ...

  4. UVA12034Race(DP)

    题目链接 题意:A.B两人赛马,最终名次有三种可能:并列第一:A第一,B第二:B第一,A第二.输入n,求 n 人赛马时最终名次的可能,结果对10056取余 分析:对于 i 匹马来说,有 i 中可能,设 ...

  5. c#正则表达式2

    System.Text.RegularExpressions.Regex ___rx = new System.Text.RegularExpressions.Regex(@""& ...

  6. js 正则表达式提取内容

    var wlan = /([a-zA-Z0-9]+)\s+Scan completed :/ var current_wlan="" if (line.match("Sc ...

  7. Java递归算法——阶乘

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.i ...

  8. 调用startActivityForResult,onActivityResult无响应的解决办法

    三种情况: 1.执行startActivityForResult,没等到被调用的 Activity 返回,onActivityResult() 就被执行了.找了很久,终于通过小道消息得知,这与 Act ...

  9. perspective属性

    1. 目前只有safari和chrome浏览器支持 -webkit-perspective. 2. 单位为像素 { -webkit-perspective:500 } 该属性只影响子元素的的透视效果.

  10. 使用node的插件UglifyJs来合并和压缩文件

    code: var fs = require('fs'); var jsp = require("./UglifyJS-master/uglify-js").parser; var ...