博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 1811 Prime Test
阅读量:6671 次
发布时间:2019-06-25

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

 这个题用到Miller_rabin与pallord算法:

View Code
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long long using namespace std;LL p[10] = { 2,3,5,7,11,13,17,19,23,29 };const LL Max = ( LL )1<<62;LL Multi( LL a ,LL b , LL n )//计算a*b { LL sum = 0; while( b ) { if( ( b&1 ) ) sum = ( sum + a )%n; a<<=1; b>>=1; if( a >= n ) a %= n; } return sum; }LL Quick_mod( LL a ,LL b ,LL n )//计算当d位奇数时a^b { LL sum = 1; while( b ) { if( ( b&1 ) ) sum = Multi( sum , a ,n ); a = Multi( a , a ,n ); b >>= 1; } return sum; }LL Miller_rabin( LL n )//米勒罗宾测试 { LL m = n -1,d,L; int k=0; if( n == 2 ) return true; if( n < 2 || !( n&1 )) return false; while( !( m&1 ) )//求n-1的2的次方 { k++ ; m >>= 1; } for( int i = 0 ; i < 9 ; i ++ ) { if( p[i] >= n ) return true; d = Quick_mod( p[i] , m ,n ); if( d == 1 ) continue; for( int j = 0; j < k ; j ++ ) { L = Multi( d , d ,n ); if( L == 1 && d != 1 && d != ( n- 1 ) ) return false; d = L; } if( d != 1 ) return false; } return true;}LL Gcd( LL a ,LL b ){ return b ==0 ? a : Gcd( b , a%b ); }LL Pallord( LL n ){ LL x,y,c=0,d,i=1,k=2; while(c==0 || c==2 ) c = abs( rand())%(n-1) + 1; x = y = (rand( )%( n-1 )) + 1; do { i++; d = Gcd( y + n - x, n ); if( d >1 && d < n ) return d; if( i == k ) { y = x; k <<= 1; } x = (Multi( x , x, n )+n-c )%n; }while( x != y ); return n; }LL Pallord_min( LL n ){ LL p,a,b; if( n == 1 ) return Max; if( Miller_rabin( n ) ) return n;//如果n为素数就返回 p = Pallord( n );//如果不是继续分解 a = Pallord_min( p );//继续分解p; b = Pallord_min( n / p ); return a < b ? a:b; //返回最小的质因子 }int main( ){ LL num; int Case; while( scanf( "%d",&Case )==1 ) { while( Case-- ) { scanf( "%I64d",&num ); if( Miller_rabin( num ) ) puts( "Prime" ); else printf( "%I64d\n",Pallord_min( num ) ); } } //system( "pause" ); return 0;}

转载于:https://www.cnblogs.com/bo-tao/archive/2012/07/17/2595585.html

你可能感兴趣的文章
负载均衡在分布式架构中是怎么玩起来的?
查看>>
Java程序员在工作的同时应该具备什么样的能力?
查看>>
Dubbo深入分析之Cluster层
查看>>
分析Padavan源代码,二
查看>>
WordPress的WPML外挂出问题恐出现安全漏洞
查看>>
Django 调试技巧
查看>>
Spring Boot和thymeleaf , freemarker , jsp三个前端模块的运用
查看>>
phalcon-入门篇3(优美的URL与Config)
查看>>
单表60亿记录等大数据场景的MySQL优化和运维之道
查看>>
sql学习笔记
查看>>
maven编译时出现There are test failures
查看>>
SpringBoot | 第三十一章:MongoDB的集成和使用
查看>>
网络学习笔记2
查看>>
JPA--多对多关系
查看>>
配置sharepoint 2010错误:Microsoft.SharePoint.Upgrad...
查看>>
UUID 生成算法JS版
查看>>
JAVA中,Map转实体类、实体类转Map的方法
查看>>
获取n!的末尾有多少个0?
查看>>
使用递归遍历并转换树形数据(以 TypeScript 为例)
查看>>
PHP类推荐:QueryList|基于phpQuery的无比强大的PHP采集工具
查看>>