//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. Viewprot meta学习笔记

    viewprot屏幕尺寸,专为移动页面设计 参数 <meta name="viewport" content="height,width,initial-scale ...

  2. POJ 2828 Buy Tickets(线段树 树状数组/单点更新)

    题目链接: 传送门 Buy Tickets Time Limit: 4000MS     Memory Limit: 65536K Description Railway tickets were d ...

  3. Code::Blocks快捷键操作

    编辑器 快捷键 功能 Ctrl+Z 恢复上一次操作 Ctrl+Shift+Z 重复上一次操作 F11 切换头文件/源文件 Ctrl+Shift+C 注释高亮代码 Ctrl+Shift+X 反注释高亮代 ...

  4. PHP之:PHP框架

    ThinkPHP - 国内PHP框架 http://www.thinkphp.cn/. OneThink-基于tp框架开发的CMS  (适于小项目) http://www.onethink.cn/. ...

  5. Linux/UNIX 定时任务 cron 详解

    定时任务( job)被用于安排那些需要被周期性执行的命令.利用它,你可以配置某些命令或者脚本,让它们在某个设定的时间内周期性地运行.cron 是 Linux 或者类 Unix 系统中最为实用的工具之一 ...

  6. HTML5学习总结-04 音频&视频播放

    一 音频播放 1 Audio(音频) HTML5提供了播放音频文件的标准 2 control(控制器) control属性攻添加播放,暂停和音量空间. 3 标签定义声音 <audio> 例 ...

  7. JSContext

    An instance of JSContext represents a JavaScript execution environment. All JavaScript execution tak ...

  8. JAVA Socket超时浅析

    JAVA Socket超时浅析 套接字或插座(socket)是一种软件形式的抽象,用于表达两台机器间一个连接的"终端".针对一个特定的连接,每台机器上都有一个"套接字&q ...

  9. elasticsearch scroll api--jestclient invoke

    @Test public void testScroll(){ JestClientFactory factory = new JestClientFactory(); factory.setHttp ...

  10. Java——新IO 缓冲区与Buffer

    缓冲区和Buffer import java.nio.IntBuffer; //================================================= // File Na ...