1. /**
  2. Miller_Rabin 算法进行素数测试
  3. 快速判断一个<2^63的数是不是素数,主要是根据费马小定理
  4. */
  5. #define ll __int128
  6. const int S=; ///随机化算法判定次数
  7. ll MOD;
  8. ///计算ret=(a*b)%c a,b,c<2^63
  9. ll mult_mod(ll a,ll b,ll c)
  10. {
  11. a%=c;
  12. b%=c;
  13. ll ret=;
  14. ll temp=a;
  15. while(b)
  16. {
  17. if(b&)
  18. {
  19. ret+=temp;
  20. if(ret>c)
  21. ret-=c;//直接取模慢很多
  22. }
  23. temp<<=;
  24. if(temp>c)
  25. temp-=c;
  26. b>>=;
  27. }
  28. return ret;
  29. }
  30.  
  31. ///计算ret=(a^n)%mod
  32. ll pow_mod(ll a,ll n,ll mod)
  33. {
  34. ll ret=;
  35. ll temp=a%mod;
  36. while(n)
  37. {
  38. if(n&)
  39. ret=mult_mod(ret,temp,mod);
  40. temp=mult_mod(temp,temp,mod);
  41. n>>=;
  42. }
  43. return ret;
  44. }
  45.  
  46. ///通过费马小定理 a^(n-1)=1(mod n)来判断n是否为素数
  47. ///中间使用了二次判断,令n-1=x*2^t
  48. ///是合数返回true,不一定是合数返回false
  49. bool check(ll a,ll n,ll x,ll t)
  50. {
  51. ll ret=pow_mod(a,x,n);
  52. ll last=ret;//记录上一次的x
  53. for(int i=;i<=t;i++)
  54. {
  55. ret=mult_mod(ret,ret,n);
  56. if(ret==&&last!=&&last!=n-)
  57. return true;//二次判断为是合数
  58. last=ret;
  59. }
  60. if(ret!=)
  61. return true;//是合数,费马小定理
  62. return false;
  63. }
  64.  
  65. ///Miller_Rabbin算法
  66. ///是素数返回true(可能是伪素数),否则返回false
  67. bool Miller_Rabbin(ll n)
  68. {
  69. if(n<) return false;
  70. if(n==) return true;
  71. if((n&)==) return false;//偶数
  72. ll x=n-;
  73. ll t=;
  74. while((x&)==)
  75. {
  76. x>>=;
  77. t++;
  78. }
  79. srand(time(NULL));
  80. for(int i=;i<S;i++)
  81. {
  82. ll a=rand()%(n-)+; // 生成随机数 0<a<=n-1 去试试
  83. if(check(a,n,x,t))
  84. return false;
  85. }
  86. return true;
  87. }

Miller_Rabin算法_单个素数检测_启发式算法的更多相关文章

  1. miller_rabin算法检测生成大素数的RSA算法实现

      import math from functools import reduce #用于合并字符 from os import urandom #系统随机的字符 import binascii # ...

  2. Miller-Rabin素数检测算法 acm模板

    Miller-Rabin素数检测算法 其基于以下两个定理. Fermat小定理 若n是素数,则∀a(a̸≡0(modn))\forall a(a \not\equiv 0 \pmod{n})∀a(a̸ ...

  3. Miller Rabin素数检测与Pollard Rho算法

    一些前置知识可以看一下我的联赛前数学知识 如何判断一个数是否为质数 方法一:试除法 扫描\(2\sim \sqrt{n}\)之间的所有整数,依次检查它们能否整除\(n\),若都不能整除,则\(n\)是 ...

  4. 数学:随机素数测试(Miller_Rabin算法)和求整数素因子(Pollard_rho算法)

    POJ1811 给一个大数,判断是否是素数,如果不是素数,打印出它的最小质因数 随机素数测试(Miller_Rabin算法) 求整数素因子(Pollard_rho算法) 科技题 #include< ...

  5. 10^9以上素数判定,Miller_Rabin算法

    #include<iostream> #include<cstdio> #include<ctime> #include<string.h> #incl ...

  6. mybatis3.1-[topic-18-20]-_映射文件_参数处理_单个参数&多个参数&命名参数 _POJO&Map&TO 三种方式及举例

    笔记要点出错分析与总结 /**MyBatis_映射文件_参数处理_单个参数&多个参数&命名参数 * _POJO&Map&TO 三种方式及举例 _ * 单个参数 : #{ ...

  7. Miller_Rabin()算法素数判定 +ollard_rho 算法进行质因数分解

    //****************************************************************// Miller_Rabin 算法进行素数测试//速度快,而且可以 ...

  8. 米勒罗宾素数检测(Miller-Rabin)

    适用范围:较大数的较快素性判断 思路: 因为有好的文章讲解具体原理(见参考文章),这里只是把代码的大致思路点一下,读完了文章如果还有些迷糊,可以参考以下解释 原理是费马小定理:如果p是素数,则a^(p ...

  9. Nginx分时段限制下载速度解决方案(原创)_于堡舰_新浪博客

    Nginx分时段限制下载速度解决方案(原创)_于堡舰_新浪博客 Nginx分时段限制下载速度解决方案(原创)    (2011-03-02 16:40:49)    转载▼    标签:    ngi ...

随机推荐

  1. gulp-htmlmin 页面压缩插件 gulp插件 参数说明

    gulpfile.js var gulp = require('gulp'), htmlmin = require('gulp-htmlmin'); gulp.task('testHtmlmin', ...

  2. Dubbo源码分析:Server

    Server接口是开启一个socket服务.服务实现有netty,mina,grizzly的. 抽象时序图 获取NettyServer时序图 Transporter类图 Server 类图

  3. ipcs

    用于报告Linux中进程间通信设施的状态,显示的信息包括消息列表.共享内存和信号量的信息

  4. CTS&&APIO2019爆零记

    如果你只好奇测试相关请跳至day 2 day 3 day 6 scoi 2019 之后 ​ 由于实力问题,省选的时候排名在三十多,显然是没有进队.不过可能是受过的打击比较多,所以还没有特别颓废,甚至连 ...

  5. 如何学习uni-app?

    uni-app 是一个使用 Vue.js 开发跨平台应用的前端框架. 开发者通过编写 Vue.js 代码,uni-app 将其编译到iOS.Android.微信小程序.H5等多个平台,保证其正确运行并 ...

  6. 树莓派基于scratch2控制GPIO

    本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/raspberry_scratch2_gpio_control.m ...

  7. Win10远程连接自己的电脑提示“登陆没有成功”的解决方案

    问题:提示登录没有成功 猜想: 1)要么是账号密码输入错误,必须是系统的用户名.密码 2)要么是配置问题,配置解决如下: 1.开启允许访问远程 找到此电脑-右键属性-高级系统设置-远程-勾选允许远程连 ...

  8. Detection of Glacier Calving Margins with Convolutional Neural Networks: A Case Study

    利用Unet结构对landsat数据进行冰川裂缝提取,结构如下:训练集很小只有123张152*240图片

  9. mysql avg()函数,获取字段的平均值

    mysql> select * from table1; +----------+------------+-----+---------------------+ | name_new | t ...

  10. Codeforces 839D Winter is here - 暴力 - 容斥原理

    Winter is here at the North and the White Walkers are close. John Snow has an army consisting of n s ...