HDU 2138 How many prime numbers(米勒拉賓素數測試演算法)
How many prime numbers
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768
K (Java/Others)
Total Submission(s): 7120 Accepted Submission(s): 2375
米勒拉賓素數測試,解大規模素數問題。
#include<iostream> using namespace std ; __int64 qpow(int a,int b,int r) { __int64 ans=1,buff=a; while(b) { if(b&1) ans=(ans*buff)%r; buff=(buff*buff)%r; b>>=1; } return ans; } bool Miller_Rabbin(int n,int a) { int r=0,s=n-1,j; if(!(n%a)) return false; while(!(s&1)) { s>>=1; r++; } __int64 k=qpow(a,s,n); if(k==1) return true; for(j=0;j<r;j++,k=k*k%n) if(k==n-1) return true; return false; } bool IsPrime(int n) { int tab[5]={2,3,5,7}; for(int i=0;i<4;i++) { if(n==tab[i]) return true; if(!Miller_Rabbin(n,tab[i])) return false; } return true; } int main() { int n; while(~scanf("%d",&n)) { int ans=0,a; for(int i=0;i<n;i++) { scanf("%d",&a); if(IsPrime(a)) ans++; } printf("%d\n",ans); } return 0; }
相關推薦
HDU 2138 How many prime numbers(米勒拉賓素數測試演算法)
How many prime numbers Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7120
千萬級高效簡便判斷是否為素數,若為合數,向左右搜尋最近的素數。(非米勒羅賓素數測試演算法)
現在ZRain要讓n個孩子變成天使,每個孩子都有一個RP值,當RP值為一個質數時孩子就能變成天使。但是改變孩子的RP值是有代價的,比如rp從x改到y需要付出|x-y|的代價。ZRain真的太喜歡這些孩子了,他希望這些孩子都變成可愛的天使,但又希望付出最小的代價。 &nbs
hdu 2138(米勒—拉賓素數測試)
How many prime numbers Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Problem Description Give
Miller_Rabin(米勒拉賓)素數測試
dir amp 可能 image 法則 卡內基 strong 概率 mod 2018-03-12 17:22:48 米勒-拉賓素性檢驗是一種素數判定法則,利用隨機化算法判斷一個數是合數還是可能是素數。卡內基梅隆大學的計算機系教授Gary Lee Miller首先提出了基於廣
算個尤拉函式給大家助助興(米勒拉賓(判斷素數)+Pollard_rho(求一個大數的因子 ))
這篇部落格講的很好: 題目描述 木南有一天學習了尤拉函式,知道了對正整數n,尤拉函式是小於n的正整數中與n互質的數的數目。那麼他定義f(n)為有多少個小於等於n的數可以整除n。 例如f(4)=3。(可以被1,2,4整除)。 那麼你可以寫個程式計算一下f(n)嗎?
(模板)米勒羅賓素數測試(大數素數判斷)&&搜尋離合數最近的素數
現在ZRain要讓n個孩子變成天使,每個孩子都有一個RP值,當RP值為一個質數時孩子就能變成天使。但是改變孩子的RP值是有代價的,比如rp從x改到y需要付出|x-y|的代價。ZRain真的太喜歡這些孩子了,他希望這些孩子都變成可愛的天使,但又希望付出最小的代價。 &nbs
素數,費馬!米勒—拉賓 素性測試(Miller–Rabin primality test)
chapter 1 Fermat's little theorem 費馬小定理 費馬小定理說的是:如果p是一個素數,那麼對於任意一個整數a,a p − a 能被p整除,也可以用模運算表示如下: (p是素數,a是整數) 這個定理又如下變式:如果p是一個素數,且整數a與p互素,那麼 a p−1
2018 ACM-ICPC 中國大學生程序設計競賽線上賽 B. Goldbach-米勒拉賓素數判定(大素數)
中國大學 sig anti lan icp cnblogs div con esp 若幹年之前的一道題,當時能寫出來還是超級開心的,雖然是個板子題。一直忘記寫博客,備忘一下。 米勒拉判大素數,關於米勒拉賓是個什麽東西,傳送門了解一下:biubiubiu~ B. Gold
米勒羅賓素數測試版-哥德巴赫猜想
#include <stdio.h> #include <iostream> #include <algorithm> #include <string.h> #include <math.h> #include &
米勒-拉賓素性檢測演算法
米勒-拉賓素性檢測就是目前應用比較廣的一種隨機化素性檢測演算法。 它是基於下面兩個定理: (費馬小定理)如果 p 為素數,且 a 無法被 p 整除,則對於所有大於0小於 p 的整數 a,有
(模板)米勒羅賓素數測試
// 18位素數:154590409516822759 // 19位素數:2305843009213693951 (梅森素數) // 19位素數:4384957924686954497 LL prime[6] = {2, 3, 5, 233, 331}; LL qmul(L
米勒羅賓素數測試
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #define maxn 0x7fffffff using name
I - How many prime numbers HDU - 2138
exc ram bool 是不是 素數 ret 測試的 AC repr Give you a lot of positive integers, just to find out how many prime numbers there are. Input There
How many prime numbers HDU - 2138 (Miller-Rabin測試)
傳送門 題意:給出一組數,測試這組數一共有多少個素數 題解:要測試N是否為素數,首先將N-1分解為(2^s)*d。在每次測試開始時,先隨機選一個介於[1,N-1]的整數a,如果對所有的r屬於[0,s-1]都滿足a^dmodN不等於1&&a^((2^r)*d)modN不等於-1
水題 第三站 How many prime numbers
判斷素數,C++程式設計課本中的程式碼,需要掌握還有值得注意的一些小細節。 bool prime(int r) { if(r==2||r==3) return true; else { for(int i=2; i<=sq
hdu 5108 Alexandra and Prime Numbers(唯一分解定理)
【唯一分解定理】 任意一個大於1的正整數都能表示成若干個質數的乘積,且表示的方法是唯一的。換句話說,一個數能被唯一地分解成質因數的乘積。因此這個定理又叫做唯一分解定理。 公式:n = P1^a1 *
米勒拉賓演算法(素性測試)
米勒拉賓素性測試 對於一個數n,如果想要判斷它是否為素數,常規的方法為試除法。即,讓n依次除以2到sqrt(n)以內的整數。如果有出現除盡的情況,則為合數。 該方法的時間複雜度為O(sqrt(n))在面對n為長整型的時候有可能超出時間要求。 因此普遍採用米
米勒羅賓素性測試(Miller–Rabin primality test)
如何判斷一個素是素數 效率很高的篩法 打個表 (素數的倍數一定是合數) 就可以解決問題。 篩選法的效率很高,但是遇到大素數就無能為力了。 米勒羅賓素性測試是一個相當著名的判斷是否是素數的演算法 核心為
米勒-拉賓(MillerRabbin)素性測試演算法詳解
寫在前面 網上有很多關於米勒拉賓素性測試演算法的部落格 但是大多數都是轉載,或者只有模板程式碼沒有分析講解的,甚至還有的分析的都是錯的。花了一早上,借鑑了幾十篇部落格,總算是把這個演算法理解了差不多,並且詳細整理了一下我的理解。 講解很細,篇幅較長,要是想看,準備好耐心。
Redraiment猜想----米勒拉賓+分塊打表
Redraiment猜想 Description redraiment在家極度無聊,於是找了張紙開始統計素數的個數。 設函式f(n)返回從1->n之間素數的個數。 redraiment發現: f(1) = 0 f(10) = 4 f(100) = 25 ... 滿足g(m