分解大质数模板(复杂度小于sqrt(n))
//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))的更多相关文章
- 统计无向图中三角形的个数,复杂度m*sqrt(m).
统计无向图中三角形的个数,复杂度m*sqrt(m). #include<stdio.h> #include<vector> #include<set> #inclu ...
- 素数筛 codevs 1675 大质数 2
1675 大质数 2 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 小明因为没做作业而被数学 ...
- codevs——1530 大质数
1530 大质数 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 小明因为没做作业而被数学老师罚站,之后数学老师 ...
- codevs——1675 大质数 2
1675 大质数 2 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 小明因为没做作业而被数学老师罚站,之 ...
- [hdu5351]找规律,大整数模板
题意:f(1)="a",f(2)="b",f(i)=f(i-1)+f(i-2),"+"表示连接符.给定n,m,求f(n)的前m个字符的“ne ...
- Pollard Rho大质数分解学习笔记
目录 问题 流程 代码 生日悖论 end 问题 给定n,要求对n质因数分解 普通的试除法已经不能应用于大整数了,我们需要更快的算法 流程 大概就是找出\(n=c*d\) 如果\(c\)是素数,结束,不 ...
- codevs 2530大质数
链接:http://codevs.cn/problem/1530/ 解题思路: 这个题最关键的剪枝还是 因子小于平方根,但不是像原来那样用. 逆转思维,与其说判断哪些是质数,不如说判断哪些不是质数,更 ...
- 湖南省第八届大学生程序设计大赛原题 D - 平方根大搜索 UVA 12505 - Searching in sqrt(n)
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=30746#problem/D D - 平方根大搜索 UVA12505 - Searchin ...
- 4招搞定项目年终总结,还有9大PPT模板免费送
作为一名合格的项目经理 一到年末,我们的头等大事就来了 那就是写项目年终总结和计划 但是………初入这行的项目经理有点犯难,因为 不 会 写 不用怕,小编送你年终总结秘籍和好看的PPT模板 先来看秘 ...
随机推荐
- 构建第一个maven工程
一.maven介绍 Maven 是一个强大的项目管理和构建自动化工具,它通过抽象的项目对象模型和构建生命周期模型来对项目及其构建过程进行管理,Maven 最大化的消除了构建的重复,提升了构建的效率与标 ...
- CF 213A Game(拓扑排序)
传送门 Description Furik and Rubik love playing computer games. Furik has recently found a new game tha ...
- Jboss7.1 加入realm auth认证 bootsfaces 美化的登录页面
jboss-as-7.1.1.Final\standalone\configuration: 1, standalone.xml中 <security-domains>标签里面添加: &l ...
- 最佳 Linux 发行版汇总
Linux入门UbuntuUbuntu是一款基于Debian发行版,以Unity作为默认桌面环境的Linux操作系统.他是世界上最流行的发行版之一,每次发行,它都有提升.最新发行版为桌面.移动及其桌面 ...
- python 培训之爬虫
1. 输入文件为 fufang_list.txt yaofang_a aaiwan 阿艾丸 yaofang_a aaiwulingsan 阿艾五苓散 yaofang_a acaitang 阿菜汤 ya ...
- 天行API服务器地址申请
http://www.tianapi.com/ http://www.huceo.com/post/383.html
- Github for Windows使用介绍
Git已经变得非常流行,连Codeplex现在也已经主推Git.Github上更是充斥着各种高质量的开源项目,比如ruby on rails,cocos2d等等.对于习惯Windows图形界面的程序员 ...
- re正则表达式13_review of regex symbols
Review of Regex Symbols This chapter covered a lot of notation, so here’s a quick review of what you ...
- Java I/O流体系
- zepto.js之ajax剖析
1.ajax的baseHeaders ajax插件中的baseHeaders对象的是http请求头部的信息 var mime = settings.accepts[dataType], baseHea ...