1. //Accepted 164 KB 422 ms
  2. //类似poj2429 大数分解
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <ctime>
  6. #include <time.h>
  7. #include <iostream>
  8. #include <algorithm>
  9. using namespace std;
  10. ;
  11. __int64 gcd(__int64 a,__int64 b)
  12. {
  13. ) return a;
  14. return gcd(b,a%b);
  15. }
  16. __int64 mult_mod(__int64 a,__int64 b,__int64 p)
  17. {
  18. __int64 res=,temp=a%p;
  19. while (b)
  20. {
  21. )
  22. {
  23. res+=temp;
  24. if (res>=p) res-=p;
  25. }
  26. temp<<=;
  27. if (temp>=p) temp-=p;
  28. b>>=;
  29. }
  30. return res;
  31. }
  32. __int64 exp_mod(__int64 a,__int64 b,__int64 p)
  33. {
  34. __int64 res=,exp=a%p;
  35. )
  36. {
  37. )
  38. res=mult_mod(res,exp,p);
  39. exp=mult_mod(exp,exp,p);
  40. b>>=;
  41. }
  42. return res;
  43. }
  44. bool miller_rabin(__int64 n,__int64 times)
  45. {
  46. ) return true;
  47. || !(n&)) return false;
  48. __int64 a,u=n-,x,y;
  49. ;
  50. ==)
  51. {
  52. t++;
  53. u/=;
  54. }
  55. srand(time());
  56. ;i<times;i++)
  57. {
  58. a=rand()%(n-)+;
  59. x=exp_mod(a,u,n);
  60. ;j<t;j++)
  61. {
  62. y=mult_mod(x,x,n);
  63. && x!= && x!=n-)
  64. return false;
  65. x=y;
  66. }
  67. ) return false;
  68. }
  69. return true;
  70. }
  71. __int64 pollar_rho(__int64 n,int c)
  72. {
  73. __int64 x,y,d,i=,k=;
  74. srand(time());
  75. x=rand()%(n-)+;
  76. y=x;
  77. while (true)
  78. {
  79. i++;
  80. x=(mult_mod(x,x,n)+c)%n;
  81. d=gcd(y-x,n);
  82. && d<n) return d;
  83. if (y==x) return n;
  84. if (i==k)
  85. {
  86. y=x;
  87. k<<=;
  88. }
  89. }
  90. }
  91. __int64 min_ans;
  92. void findMinFactor(__int64 n,int c)
  93. {
  94. ) return ;
  95. ))
  96. {
  97. if (n<min_ans) min_ans=n;
  98. return ;
  99. }
  100. __int64 p=n;
  101. while (p>=n)
  102. p=pollar_rho(p,c--);
  103. findMinFactor(p,c);
  104. findMinFactor(n/p,c);
  105. }
  106. int main()
  107. {
  108. int T;
  109. scanf("%d",&T);
  110. while (T--)
  111. {
  112. __int64 n;
  113. scanf("%I64d",&n);
  114. )==true)
  115. {
  116. printf("Prime\n");
  117. }
  118. else
  119. {
  120. min_ans=inf;
  121. findMinFactor(n,);
  122. printf("%I64d\n",min_ans);
  123. }
  124. }
  125. ;
  126. }

poj1181 大数分解的更多相关文章

  1. HDU4344(大数分解)

    题目:Mark the Rope 题意就是给一个数,然后求这个数的所有因子中组成的最大的一个子集,其中1和本身除外,使得在这个子集中元素两两互素,求最大子集的元素个 数,并且求出和最大的值. 找规律就 ...

  2. poj 1811 随机素数和大数分解(模板)

    Sample Input 2 5 10 Sample Output Prime 2 模板学习: 判断是否是素数,数据很大,所以用miller,不是的话再用pollard rho分解 miller : ...

  3. Pollard_Rho大数分解模板题 pku-2191

    题意:给你一个数n,  定义m=2k-1,   {k|1<=k<=n},并且 k为素数;  当m为合数时,求分解为质因数,输出格式如下:47 * 178481 = 8388607 = ( ...

  4. poj 1811 大数分解

    模板 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h> ...

  5. poj 2429 Pollard_rho大数分解

    先对lcm/gcd进行分解,问题转变为从因子中选出一些数相乘,剩下的数也相乘,要求和最小. 这里能够直接搜索,注意一个问题,因为同样因子不能分配给两边(会改变gcd)所以能够将同样因子合并,这种话,搜 ...

  6. 模板题Pollard_Rho大数分解 A - Prime Test POJ - 1811

    题意:是素数就输出Prime,不是就输出最小因子. #include <cstdio> #include<time.h> #include <algorithm> ...

  7. 【模板】SPOJ FACT0 大数分解 miller-rabin & pollard-rho

    http://www.spoj.com/problems/FACT0/en/ 给一个小于1e15的数,将他分解. miller-rabin & pollard-rho模板 #include & ...

  8. 数学--数论---P4718 Pollard-Rho算法 大数分解

    P4718 [模板]Pollard-Rho算法 题目描述 MillerRabin算法是一种高效的质数判断方法.虽然是一种不确定的质数判断法,但是在选择多种底数的情况下,正确率是可以接受的.Pollar ...

  9. poj2429 大数分解+dfs

    //Accepted 172 KB 172 ms //该程序为随机性算法,运行时间不定 #include <cstdio> #include <cstring> #includ ...

随机推荐

  1. Linux源码安装mysql步骤

    创建文件夹: mkdir  /usr/local/webserver 安装必要依赖包      yum -y install gcc gcc-c++ make ncurses-devel安装cmake ...

  2. Spring框架的反序列化远程代码执行漏洞分析(转)

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

  3. Cmd Markdown 简明语法手册

    『Cmd 技术渲染的沙箱页面,点击此处编写自己的文档』 Cmd Markdown 简明语法手册 标签: Cmd-Markdown 1. 斜体和粗体 使用 * 和 ** 表示斜体和粗体. 示例: 这是 ...

  4. JavaScript学习笔记(十二) 回调模式(Callback Pattern)

    函数就是对象,所以他们可以作为一个参数传递给其它函数: 当你将introduceBugs()作为一个参数传递给writeCode(),然后在某个时间点,writeCode()有可能执行(调用)intr ...

  5. python 练习 22

    Python程序语言指定任何非0和非空(null)值为true,0 或者 null为false. Python 编程中 if 语句用于控制程序的执行,基本形式为: if 判断条件: 执行语句…… el ...

  6. Ubuntu 安装 Redis

    1. 下载并安装 redis 2.6.16版 sudo mkdir /usr/local/src/Redis cd /usr/local/src/Redis sudo wget http://down ...

  7. java多线程的常用方法(以及注意事项)

    /* * 线程的常用方法 * 1.start(); * 2.run(); * 3.sleep(int millsecond); * 4.isAlive(); -->判断线程是否还在运行 * 5. ...

  8. IOS开发设计思路

    我在做 iOS 开发的时候,发现自己在写程序的时候,常常处于两种状态的切换,我把这两种状态称为软件开发的上帝模式与农民模式.我先给大家介绍一下这两种模式的特点. 上帝模式 处于上帝模式时,我需要构思整 ...

  9. centos修改文件及文件夹权限

    查看文件权限的语句: 在终端输入:ls -l xxx.xxx (xxx.xxx是文件名) 那么就会出现相类似的信息,主要都是这些:-rw-rw-r-- 一共有10位数 其中: 最前面那个 - 代表的是 ...

  10. JSON 换行、JSON \r\n、怎么处理 ?(转载)

    参考地址: http://www.cnblogs.com/mamingbo/archive/2010/11/27/1889583.html 在最后json的字符串上:.Replace("\r ...