POJ1811 Prime Test(miller素数判断&&pollar_rho大数分解)
http://blog.csdn.net/shiyuankongbu/article/details/9202373
发现自己原来的那份模板是有问题的,而且竟然找不出是哪里的问题,所以就用了上面的链接上的一份代码,下面只是寄存一下这份代码,以后打印出来当模板好了。
#pragma warning(disable:4996)
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <map>
#include <cstdlib>
#include <cstdio>
using namespace std; #define Times 10
map<long long, int>m;
long long mi;
long long random(long long n)
{
return ((double)rand() / RAND_MAX*n + 0.5);
} long long multi(long long a, long long b, long long mod)
{
long long ans = 0;
while (b){
if (b & 1) ans = (ans + a) % mod;
b >>= 1;
a = (a << 1) % mod;
}
return ans;
}
long long Pow(long long a, long long b, long long mod)
{
long long ans = 1;
while (b){
if (b & 1) ans = multi(ans, a, mod);
b >>= 1;
a = multi(a, a, mod);
}
return ans;
}
bool witness(long long a, long long n)
{
long long d = n - 1;
while (!(d & 1))
d >>= 1;
long long t = Pow(a, d, n);
while (d != n - 1 && t != 1 && t != n - 1)
{
t = multi(t, t, n);
d <<= 1;
}
return t == n - 1 || d & 1;
}
bool miller_rabin(long long n)
{
if (n == 2)
return true;
if (n<2 || !(n & 1))
return false;
for (int i = 1; i <= Times; i++)
{
long long a = random(n - 2) + 1;
if (!witness(a, n))
return false;
}
return true;
}
long long gcd(long long a, long long b)
{
return a&&b ? gcd(b, a%b) : a + b;
}
long long pollard_rho(long long n, int c)
{
long long x, y, d, i = 1, k = 2;
x = random(n - 2) + 1;
y = x;
while (1){
i++;
x = (multi(x, x, n) + c) % n;
d = gcd(y - x, n);
if (1<d&&d<n)
return d;
if (y == x)
return n;
if (i == k){
y = x;
k <<= 1;
}
}
}
void find(long long n, int c)
{
if (n == 1)
return;
if (miller_rabin(n)){
m[n]++;
mi = min(mi, n);
return;
}
long long p = n;
while (p >= n)
p = pollard_rho(p, c--);
find(p, c);
find(n / p, c);
}
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
long long n;
scanf("%lld", &n);
mi = n;
if (miller_rabin(n))
cout << "Prime" << endl;
else
{
find(n, 12312);
cout << mi << endl;
}
}
return 0;
}
POJ1811 Prime Test(miller素数判断&&pollar_rho大数分解)的更多相关文章
- POJ3126 Prime Path (bfs+素数判断)
POJ3126 Prime Path 一开始想通过终点值双向查找,从最高位开始依次递减或递增,每次找到最接近终点值的素数,后来发现这样找,即使找到,也可能不是最短路径, 而且代码实现起来特别麻烦,后来 ...
- poj 1811 随机素数和大数分解(模板)
Sample Input 2 5 10 Sample Output Prime 2 模板学习: 判断是否是素数,数据很大,所以用miller,不是的话再用pollard rho分解 miller : ...
- POJ 1811 大素数判断
数据范围很大,用米勒罗宾测试和Pollard_Rho法可以分解大数. 模板在代码中 O.O #include <iostream> #include <cstdio> #inc ...
- 有关素数判断的一些算法(总结&&对比)
素性测试是数论题中比较常用的一个技巧.它可以很基础,也可以很高级(哲学).这次主要要介绍一下有关素数判断的奇技淫巧 素数的判断主要分为两种:范围筛选型&&单个判断型 我们先从范围筛选型 ...
- 数论 - Miller_Rabin素数测试 + pollard_rho算法分解质因数 ---- poj 1811 : Prime Test
Prime Test Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 29046 Accepted: 7342 Case ...
- JAVA语言的素数判断,随机数,函数调用
近来刚学JAVA,就从JAVA写起吧,JAVA判别素数,其实方法和C/C++没什么区别,主要就是想谈一下,其中包括的3个点. (1)JAVA语言产生随机数,random函数,定义参数max的作用是给出 ...
- POJ 3126 Prime Path(素数路径)
POJ 3126 Prime Path(素数路径) Time Limit: 1000MS Memory Limit: 65536K Description - 题目描述 The minister ...
- #C++初学记录(素数判断2)
素数判断2 比较简单的算法,没有技术含量 A prime number is a natural number which has exactly two distinct natural numbe ...
- #C++初学记录(素数判断)
练习题目二 素数判断 A prime number is a natural number which has exactly two distinct natural number divisors ...
随机推荐
- CMD怎样建立文件?
一.建立空文件的几种方法1.cd.>a.txtcd.表示改变当前目录为当前目录,即等于没改变:而且此命令不会有输出.>表示把命令输出写入到文件.后面跟着a.txt,就表示写入到a.txt. ...
- IIS 配置错误解决方法集合
问题:405 - 不允许用于访问此页的 HTTP 谓词 解决:IIS处理程序映射中添加模块映射,模块选择:ServerSideIncludeModule,名称:SSINC-HTML
- html5 shiv
使用html5标签吧!ie6.ie7.ie8不支持怎么办?它的原理是如此的简单: 1.document.createElement("ele"); // js虚拟创建一个元 ...
- iOS 数据库持久化
Java代码 -(void) addObserver{ //当程序进入后台时执行操作 UIApplication *app = [UIApplication sharedApplication]; [ ...
- QT 按钮类继承处理带定时器
01.class KeyButton : public QPushButton 02.{ 03. Q_OBJECT 04.public: 05. explicit KeyButto ...
- Json.Net使用JSON Schema验证JSON格式【实例】
给出一个Json,验证其格式是否符合规则. { "coord": { //对象 "lon": 145.77, "lat": -16.92 } ...
- Ubuntu 12.04 Desktop配置XAMPP【转】
转载:[ubuntu][xampp]开发环境配置 XAMPP 并不适用于生产环境,而仅供开发环境使用.XAMPP 被设置为尽量开放,并提供开发者任何他/她想要的功能.这对于开发环境来说是很棒的,但对于 ...
- Windows Phone 8 实现列表触底加载
[背景] 很多时候在做WP开发的过程中会遇到数据需要分页获取,根据微软官方的推荐方式,建议实现为Market中类似的体验,即滑动到列表的底部的时候加载更多的数据. 这一需求在早起WP7.1时代实现起来 ...
- 延迟加载 ERROR org.hibernate.LazyInitializationException:42 - could not initialize proxy - ...
no Session问题,即延迟加载 延迟加载的问题是指当我们调用完action中的某个方法,在jsp页面要显示我们想要的信息的时候,发现在dao中打开的session已经关闭了. 如下图,第一个箭头 ...
- 6、android开发中遇到的bug整理
1.使用actionProvider时出现的问题 bug复现: 解决方案: //import android.support.v4.view.ActionProvider; import androi ...