【update 2017-03-26】http://www.cnblogs.com/candy99/p/6624643.html


满足费马小定理 a^(n-1) === 1(mod n)

--->伪素数      

对于所有a belong Zn*,总存在满足的合数n,称为Carmichael数

----------------------------------

【Miller-Rabin】:

1.随机找多个s个a

2.二次探测定理: 如果p是奇素数,则 x2 === 1(mod p)的解为 x = 1 || x = p - 1(mod p)    {如:5的话,1或4}

//Miller-Rabin
//n prime a -->a^(n-1)===1(mod n) -->fastPowMod(a,n-1,n)==1
//warn: Carmichael/lucky ll mulModhaoxiangmeiyonghenman(ll a,ll b,ll n){
ll ans=;
for(;b;a=(a<<)%n,b>>=)
if(b&)
ans=(ans+a)%n;
return ans;
} ll mulMod(ll a,ll b,ll n){ //黑科技
ll ans=(a*b-(ll)((long double)a/n*b+0.5)*n);
return ans<?ans+n:ans;
} ll powMod(ll a,ll b,ll n){
ll ans=;
for(;b;a=mulMod(a,a,n),b>>=)
if(b&)
ans=(ans*a)%n;
return ans;
} bool witness(ll a,ll n,ll u,int t){
ll now=powMod(a,u,n),pre=now; for(int i=;i<=t;i++){
now=mulMod(now,now,n);
if(now==&&pre!=&&pre!=n-)
return true;
pre=now;
}
if(now!=) return true;
return false;
} bool mrP(ll n){
if(n<=) return false;
if(n==) return true;
if((n&)==) return false; ll u=n-;
int t=;
while((u&)==) u>>=,t++; //n-1=2^t *u int a[]={,,,,,}; //or random
for(int i=;i<;i++){
if(n==a[i]) return true;
else if(witness(a[i],n,u,t)) return false;
}
return true;
}

最新文章

  1. CSS背景图拉伸不变形
  2. 如何利用OCS缓存TomcatSession全局变量(转)
  3. CListCtrl
  4. 解决centos7重启后出现ata bus error
  5. JS面向对象的几种写法
  6. 零基础如何入门Python
  7. dede修改templets模板文件夹后,出现“无法在这个位置找到: ”错误的解决办法
  8. 【English】六、am,is,are 分别用在什么地方
  9. java 运算符的优先级比较
  10. python 全局变量
  11. supervisor学习
  12. 操作dom影响性能的原因
  13. Android播放功能的实现
  14. 拓扑排序 --- AtCode - 3596
  15. 利用media query让背景图适应不同分辨率的设备
  16. SearchBySql
  17. poj3252Round Numbers【组合数】【数位dp】
  18. java8新特性——并行流与顺序流
  19. 从Github上轻松安装R包—githubinstall包--转载
  20. 应用性能管理工具PinPoint介绍

热门文章

  1. JavaScript学习笔记-用于模式匹配的String方法
  2. js中如何获取纯正的undefined?
  3. DevExpress 2015.2发布 看看有哪些更新
  4. Web自动化测试 Selenium 1/3
  5. Hbase Java API详解
  6. JAVA内部类使用
  7. iOS指南针
  8. GitHub Top 100 的项目(iOS)
  9. SVN 使用锁实现独占式签出
  10. file get contents 访问不了域名原因