最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python素?cái)?shù)篩選法淺析

 更新時(shí)間:2018年03月19日 14:46:27   作者:power721  
這篇文章主要為大家詳細(xì)介紹了python素?cái)?shù)篩選法的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

原理:

  素?cái)?shù),指在一個(gè)大于1的自然數(shù)中,除了1和此整數(shù)自身外,不能被其他自然數(shù)整除的數(shù)。在加密應(yīng)用中起重要的位置,比如廣為人知的RSA算法中,就是基于大整數(shù)的因式分解難題,尋找兩個(gè)超大的素?cái)?shù)然后相乘作為密鑰的。一個(gè)比較常見的求素?cái)?shù)的辦法是埃拉托斯特尼篩法(the Sieve of Eratosthenes) ,說(shuō)簡(jiǎn)單一點(diǎn)就是畫表格,然后刪表格,如圖所示:

  從2開始依次往后面數(shù),如果當(dāng)前數(shù)字一個(gè)素?cái)?shù),那么就將所有其倍數(shù)的數(shù)從表中刪除或者標(biāo)記,然后最終得到所有的素?cái)?shù)。

有一個(gè)優(yōu)化:

標(biāo)記2和3的倍數(shù)的時(shí)候,6被標(biāo)記了兩次。所以從i的平方開始標(biāo)記,減少很多時(shí)間。

比如3的倍數(shù)從9開始標(biāo)記,而不是6,并且每次加6。

除了2以外,所有素?cái)?shù)都是奇數(shù)。奇數(shù)的平方還是奇數(shù),如果再加上奇數(shù)就變成了偶數(shù)一定不會(huì)是素?cái)?shù),所以加偶數(shù)(2倍素?cái)?shù))。

預(yù)先處理了所有偶數(shù)。

注意:1既不是素?cái)?shù)也不是合數(shù),這里沒(méi)有處理1。

#! prime.py 
import time 
 
def primes(n): 
 P = [] 
 f = [] 
 for i in range(n+1): 
  if i > 2 and i%2 == 0: 
   f.append(1) 
  else: 
   f.append(0) 
 
 i = 3 
 while i*i <= n: 
  if f[i] == 0: 
   j = i*i 
   while j <= n: 
    f[j] = 1 
    j += i+i 
  i += 2 
 
 P.append(2) 
 for i in range(3,n,2): 
  if f[i] == 0: 
   P.append(i) 
 
 return P 
 
def isPrime(n): 
 if n > 2 and n%2 == 0: 
  return 0 
 
 i = 3 
 while i*i <= n: 
  if n%i == 0: 
   return 0 
  i += 2 
 
 return 1 
 
def primeCnt(n): 
 cnt = 0 
 for i in range(2,n): 
  if isPrime(i): 
   cnt += 1 
 return cnt 
 
if __name__ == '__main__': 
 start = time.clock() 
 n = 10000000 
 P = primes(n); 
 print("There are %d primes less than %d"%(len(P),n)) 
 #for i in range(10): 
 # print(P[i]) 
 print("Time: %f"%(time.clock()-start)) 
 #for n in range(2,100000): 
 # if isPrime(n): 
 #  print("%d is prime"%n) 
  #print("%d is "%n + ("prime" if isPrime(n) else "not prime")) 
 
 start = time.clock() 
 n = 1000000 
 print("There are %d primes less than %d"%(primeCnt(n),n)) 
 print("Time: %f"%(time.clock()-start) 

用素?cái)?shù)篩選法求1千萬(wàn)以內(nèi)的素?cái)?shù)用了5.767s,

普通素?cái)?shù)判斷法求1百萬(wàn)以內(nèi)的素?cái)?shù)用了9.642s,

用C++素?cái)?shù)篩選法求1億以內(nèi)的素?cái)?shù)用了0.948s,

用C++普通素?cái)?shù)判斷法求1千萬(wàn)以內(nèi)的素?cái)?shù)用了3.965s,

可見解釋語(yǔ)言確實(shí)比編譯語(yǔ)言慢很多。

附C++程序,用了位壓縮優(yōu)化空間

#include <iostream> 
#include <cstdio> 
#include <algorithm> 
using namespace std; 
#define N 100000001 
 
unsigned f[(N>>5)+5]; 
int p[5761456],m; 
void init() 
{ 
  int i,j; 
  for(i=4;i<N;i+=2) 
    f[i>>5]|=1<<(i&0x1F); 
  p[m++]=2; 
  for(i=3;i*i<N;i+=2) 
    if(!(f[i>>5]&(1<<(i&0x1F)))) 
    { 
      p[m++]=i; 
      for(j=i*i;j<N;j+=i+i) 
        f[j>>5]|=1<<(j&0x1F); 
    } 
  for(;i<N;i+=2) 
    if(!(f[i>>5]&(1<<(i&0x1F)))) 
      p[m++]=i; 
} 
int is_prime(int n) 
{ 
  int i; 
  for(i=0;p[i]*p[i]<=n;i++) 
    if(n%p[i]==0) 
      return 0; 
  return 1; 
} 
int isPrime(int n) 
{ 
  if(n>2 && n%2==0) 
    return 0; 
  int i=3; 
  while(i*i<=n) 
  { 
    if(n%i==0) 
      return 0; 
    i+=2; 
  } 
  return 1; 
} 
int main() 
{ 
  int n=0,i; 
  clock_t st=clock(); 
  init(); 
  /*for(i=2;i<10000000;i++) 
    if(isPrime(i)) 
      n++;*/ 
  printf("%d %dms\n",m,clock()-st); 
  /*while(~scanf("%d",&n),n) 
  { 
    i=lower_bound(p,p+m,n+1)-p; 
    printf("%d\n",i); 
  }*/ 
  return 0; 
} 

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python中nan與inf轉(zhuǎn)為特定數(shù)字方法示例

    python中nan與inf轉(zhuǎn)為特定數(shù)字方法示例

    這篇文章主要給大家介紹了將python中nan與inf轉(zhuǎn)為特定數(shù)字的方法,文中給出了詳細(xì)的示例代碼和運(yùn)行結(jié)果,對(duì)大家的理解和學(xué)習(xí)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-05-05
  • Python 3.10 中 6 個(gè)興奮的新特性

    Python 3.10 中 6 個(gè)興奮的新特性

    Python 是當(dāng)今最流行的編程語(yǔ)言之一其流行的原因有很多種,Python 3.10 有幾個(gè)新的很酷的功能,使得使用 Python 成為一種更好的體驗(yàn)。在本文中,我將與您分享 6 個(gè)讓我最興奮的新特性,感興趣的朋友一起看看吧
    2021-10-10
  • python動(dòng)態(tài)視頻下載器的實(shí)現(xiàn)方法

    python動(dòng)態(tài)視頻下載器的實(shí)現(xiàn)方法

    這里向大家分享一下python爬蟲的一些應(yīng)用,主要是用爬蟲配合簡(jiǎn)單的GUI界面實(shí)現(xiàn)視頻,音樂(lè)和小說(shuō)的下載器。今天就先介紹如何實(shí)現(xiàn)一個(gè)動(dòng)態(tài)視頻下載器,需要的朋友可以參考下
    2019-09-09
  • 淺談五大Python Web框架

    淺談五大Python Web框架

    Python這么多框架,能挨個(gè)玩?zhèn)€遍的人不多,坦白的說(shuō)我也只用過(guò)其中的三個(gè)開發(fā)過(guò)項(xiàng)目,另外一些稍微接觸過(guò),所以這里只能淺談一下,歡迎懂行的朋友們補(bǔ)充
    2017-03-03
  • 使用PyCharm配合部署Python的Django框架的配置紀(jì)實(shí)

    使用PyCharm配合部署Python的Django框架的配置紀(jì)實(shí)

    這篇文章主要介紹了使用PyCharm配合部署Python的Django框架的配置紀(jì)實(shí),PyCharm是一款強(qiáng)大的Python的IDE,需要的朋友可以參考下
    2015-11-11
  • Python引用計(jì)數(shù)操作示例

    Python引用計(jì)數(shù)操作示例

    這篇文章主要介紹了Python引用計(jì)數(shù)操作,結(jié)合實(shí)例形式分析了Python引用計(jì)數(shù)相關(guān)操作與運(yùn)行機(jī)制,需要的朋友可以參考下
    2018-08-08
  • Python基礎(chǔ)教程之NumPy庫(kù)的使用詳解

    Python基礎(chǔ)教程之NumPy庫(kù)的使用詳解

    NumPy(Numerical Python)是一個(gè)用于處理數(shù)組的Python庫(kù),學(xué)習(xí)機(jī)器學(xué)習(xí)的過(guò)程中先學(xué)會(huì)使用NumPy是非常重要的,所以本文就給大家詳細(xì)介紹一下如何使用NumPy庫(kù),需要的小伙伴跟著小編一起來(lái)看看吧
    2023-07-07
  • Python測(cè)試Kafka集群(pykafka)實(shí)例

    Python測(cè)試Kafka集群(pykafka)實(shí)例

    今天小編就為大家分享一篇Python測(cè)試Kafka集群(pykafka)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • Python代碼調(diào)試的幾種方法總結(jié)

    Python代碼調(diào)試的幾種方法總結(jié)

    這篇文章主要介紹了Python代碼調(diào)試的幾種方法總結(jié),本文來(lái)自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • Python實(shí)現(xiàn)批量讀取HDF多波段柵格數(shù)據(jù)并繪制像元直方圖

    Python實(shí)現(xiàn)批量讀取HDF多波段柵格數(shù)據(jù)并繪制像元直方圖

    這篇文章主要為大家詳細(xì)介紹了如何基于Python語(yǔ)言gdal模塊,實(shí)現(xiàn)多波段HDF柵格圖像文件的讀取、處理與像元值可視化(直方圖繪制)等操作,需要的可以參考一下
    2023-03-03

最新評(píng)論

邹平县| 信阳市| 日照市| 海南省| 裕民县| 维西| 澎湖县| 大兴区| 洱源县| 焉耆| 博乐市| 清苑县| 佛学| 建德市| 璧山县| 交城县| 南陵县| 双柏县| 涿鹿县| 吉隆县| 嘉定区| 东莞市| 天门市| 喀什市| 襄城县| 讷河市| 新郑市| 扎囊县| 会东县| 额济纳旗| 永顺县| 长白| 通榆县| 昆山市| 安国市| 砀山县| 石河子市| 莆田市| 加查县| 于都县| 绥中县|