先贴模板
根据概率论学 当一件事发生的概率 低于0.01% 时 这件事就不可能发生,即使在竞赛中倒了 ACM历史以来最大的霉运,出现了判断失误的情况 你就再交一次,总不会次次出现低于0.01%的事件吧,比买彩票中大奖、被闪电劈中的概率低多了。
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define IO ios::sync_with_stdio(false) #define pb push_back #define mk make_pair const int N = 1e5+10; const int mod = 1e9+7; ll a, b; const long long S=20; ll mult_mod(ll a,ll b,ll mod)//快速乘 { ll res=0; for(;b;b>>=1){ if(b&1) res=(res+a)%mod; a=(a+a)%mod; } return res; } ll pow_mod(ll a,ll b,ll mod)//快速幂 { ll res=1; a%=mod; for(;b;b>>=1){ if(b&1) res=mult_mod(res,a,mod); a=mult_mod(a,a,mod); } return res; } int check(ll a,ll n,ll x,ll t){ ll ret=pow_mod(a,x,n);//费马小定理 a^(p-1)%p==1 ll last=ret; for(ll i=1;i<=t;i++){//二次检测定理 如果p是一个素数,则x^2%p==1的解为,则x=1或者x=n-1。 ret=mult_mod(ret,ret,n); if(ret==1&&last!=1&&last!=n-1) return 1; last=ret; } if(ret!=1) return 1; return 0; } int Miller_Rabin(ll n){ if(n<2)return 0; if(n==2)return 1; if((n&1)==0) return 0; ll x=n-1; ll t=0; while((x&1)==0){x>>=1;t++;} for(ll i=0;i<S;i++){ ll a=rand()%(n-1)+1; if(check(a,n,x,t)) return 0; } return 1; } int main(){ for(ll i=100000000000;i<=100000000100;++i){ if(Miller_Rabin(i)) printf("%lld 是素数n",i); else printf("%lld 不是素数n",i); } }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算