//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. Redis 学习笔记续

    Redis - 数据类型 Redis支持5种类型的数据类型,它描述如下的: 字符串 Redis字符串是字节序列.Redis字符串是二进制安全的,这意味着他们有一个已知的长度没有任何特殊字符终止,所以你 ...

  2. cookie的实例

    使得Cookie简化用户登陆,要求如下: 1.用户第一次登陆时需要输入用户名和密码 2.当登陆成功后,在Cookie中保存用户的登陆信息 3.设置Cookie有效期为5分钟 4.在有效期内用户再次登陆 ...

  3. [USACO 2010 OPEN]SLIED

    传送门 这道题的题意描述简直有毒.题没看完一眼分层图,然后火速敲了个堆优化的dijkstra,然后就被样例教做人了QAQ 这里说的最坏的情况让我很迷茫?感觉很难判定到底什么是最坏的情况以及确定了最坏的 ...

  4. JZOJ P1830[9.30]送牛奶

    传送门 临近NOIp,写一些简单题. 二分+BFS,注意的是要把数组开小点,有效减少memset的时间. //OJ 1830 //by Cydiater //2016.9.22 #include &l ...

  5. mysql使用索引优化查询效率

    索引的概念 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针.更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度.在没 ...

  6. linux配置IP的方法

    Linux系统下如何设置IP地址?我们可以通过命令设定IP的方法,不过此方法的前提条件是用户需root权限.在Linux系统的 /etc/sysconfig/network-script/ifcfg- ...

  7. 20145212 《Java程序设计》第5周学习总结

    20145212 <Java程序设计>第5周学习总结 教材学习内容总结 第八章 1.Java中所有错误都会被打包为对象,通过try和catch语法可以对代表错误的对象做处理. try{ . ...

  8. CPU绑定操作

    使用virsh vcpuinfp命令查看虚拟机VCPU和物理CPU的对应关系 [root@svn ~]# virsh vcpuinfo 16 VCPU: 0 CPU: 3 状态: running CP ...

  9. 创建menu文件

    一.问题: android studio项目中没有看到menu文件夹: 在android studio项目中想要添加menu布局文件,一开始我的做法是:直接在res文件夹右键选择xml文件来添加,如下 ...

  10. Python基础之【第三篇】

    dir(): 默认打印当前模块的所有属性,如果传一个对象参数则打印当前对象的变量名 vars() 默认打印当前模块的所有属性,如果传一个对象参数则打印当前对象的变量名和值 reload() 将以前导入 ...