博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pku 1811 Prime Test 大素数判定和大数分解
阅读量:5872 次
发布时间:2019-06-19

本文共 2604 字,大约阅读时间需要 8 分钟。

 

/*  * pku1811.c  *  *  Created on: 2011-8-1  *      Author: 王竹 */ #include
#include
#define LL long long LL pmin; LL modular_multi(LL a, LL b, LL c) {
LL ret; ret = 0, a %= c; while (b) {
if (b & 1) {
ret += a; if (ret > c) {
ret -= c; } } a <<= 1; if (a > c) {
a -= c; } b >>= 1; } return ret; } LL modular_exp(LL a, LL b, LL c) {
LL ret; a %= c, ret = 1; while (b) {
if (b & 1) {
ret = modular_multi(ret, a, c); } a = modular_multi(a, a, c); b >>= 1; } return ret; } int miller_rabin(LL n, int times) {
if (n == 2) {
return 1; } if ((n < 2) && (!(n & 1))) {
return 0; } LL te, a, x, y; te = n - 1; int temp; temp = 0; while (!(te & 1)) {
te >>= 1; temp++; } int i, j; for (i = 0; i < times; i++) {
a = rand() % (n - 1) + 1; x = modular_exp(a, te, n); for (j = 0; j < temp; j++) {
y = modular_multi(x, x, n); if ((y == 1) && (x != 1) && (x != (n - 1))) {
return 0; } x = y; } if (x != 1) {
return 0; } } return 1; } LL gcd(LL a, LL b) {
LL te; if (a < b) {
te = a, a = b, b = te; } if (b == 0) {
return a; } while (b) {
te = a % b; a = b; b = te; } return a; } LL pollard_rho(LL n, int c) {
LL x, y, d, i, k; x = rand() % (n - 1) + 1; y = x; i = 1LL, k = 2LL; while (1) {
i++; x = (modular_multi(x, x, n) + c) % n; d = gcd(y - x, n); if ((1 < d) && (d < n)) {
return d; } if (x == y) {
return n; } if (i == k) {
k <<= 1; y = x; } } return -1; } void findFactor(LL n, int c) {
if (n == 1) {
return; } if (miller_rabin(n, 6)) {
if (n < pmin) {
pmin = n; } return; } LL p = n; while (p >= n) {
p = pollard_rho(p, c--); } findFactor(p, c); findFactor(n / p, c); } int main() {
#ifndef ONLINE_JUDGE freopen("t.txt", "r", stdin); #endif int T; LL n; while (scanf("%d", &T) != EOF) {
while (T--) {
scanf("%I64d", &n); if (miller_rabin(n, 10)) {
printf("Prime\n"); continue; } pmin = 1LL << 54; findFactor(n, 107); printf("%I64d\n", pmin); } } return 0; }

转载于:https://www.cnblogs.com/xiaoxian1369/archive/2011/10/11/2207685.html

你可能感兴趣的文章
后期处理
查看>>
switch语句
查看>>
进程内存分配
查看>>
运动App后台持续定位生成轨迹
查看>>
做一个APP
查看>>
Web-Attak系列教程第二季0x12讲——HTTP的请求与响应格式
查看>>
缓存基础整理
查看>>
【BZOJ】2599: [IOI2011]Race 点分治
查看>>
git仓库构建小记
查看>>
JDK 1.8新特性
查看>>
matlab做聚类分析
查看>>
“/"应用程序中的服务器错误
查看>>
快速定位NodeJs线上问题 - 之火焰图篇
查看>>
leetcode-345-Reverse Vowels of a String
查看>>
Spring Cloud F & Spring Boot 2.0 版本升级说明书
查看>>
代码评审-如何保证缓存与数据库的读写一致性?
查看>>
什么是面向对象,为什么要面向对象
查看>>
聊聊Lambda架构
查看>>
iOS逆向工程- 工具详解
查看>>
开发者必备Linux命令
查看>>