最新国产好看的视频,伊人天堂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) ,說簡(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ù),這里沒有處理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千萬以內(nèi)的素?cái)?shù)用了5.767s,

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

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

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

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

附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à)值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • Python 3.10 中 6 個(gè)興奮的新特性

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

    Python 是當(dāng)今最流行的編程語言之一其流行的原因有很多種,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)視頻,音樂和小說的下載器。今天就先介紹如何實(shí)現(xiàn)一個(gè)動(dòng)態(tài)視頻下載器,需要的朋友可以參考下
    2019-09-09
  • 淺談五大Python Web框架

    淺談五大Python Web框架

    Python這么多框架,能挨個(gè)玩?zhèn)€遍的人不多,坦白的說我也只用過其中的三個(gè)開發(fā)過項(xiàng)目,另外一些稍微接觸過,所以這里只能淺談一下,歡迎懂行的朋友們補(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庫的使用詳解

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

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

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

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

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

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

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

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

最新評(píng)論

安岳县| 彰武县| 伊吾县| 大竹县| 津南区| 九寨沟县| 苏尼特右旗| 疏附县| 龙川县| 嵊泗县| 磴口县| 洪雅县| 涿鹿县| 内乡县| 新兴县| 高陵县| 延吉市| 郸城县| 高安市| 西华县| 武义县| 鄄城县| 马尔康县| 绵阳市| 竹山县| 辽源市| 黄平县| 浦东新区| 新沂市| 嫩江县| 鄂尔多斯市| 正蓝旗| 天水市| 汤阴县| 定州市| 新邵县| 永康市| 夏邑县| 灌阳县| 明星| 永和县|