亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

素數判定算法的實現

2020-01-26 15:21:41
字體:
來源:轉載
供稿:網友

1. 素數判定問題

素數判定問題是一個非常常見的問題,本文介紹了常用的幾種判定方法。

2. 原始算法

素數的定義是,除了能被1和它本身整除而不能被其他任何數整除的數。根據素數定義 只需要用2到n-1去除n,如果都除不盡,則n是素數,否則,只要其中有一個數能整除則n不是素數。

復制代碼 代碼如下:

bool is_primer1(int num) {
 
  int i;
 
  for(i = 2; i < num; i++) {
 
    if(num % i == 0) {
 
      return true;
 
    }
 
  }
 
  return false;
 
}

3. 改進算法

n不是素數,則n可表示為a*b,其中2<=a<=b<=n-1,則a,b中必有一個數滿足:1<x<=sqrt(n),因而,只需要用2~sqrt(n)去除n,這樣就得到一個復雜度為O(sqrt(n))的算法

復制代碼 代碼如下:

bool is_primer2(int num) {
 
  int i;
 
  int upper = sqrt(num);
 
  printf("primer2:%d/n", upper);
 
  for(i = 2; i <= upper; i++) {
 
    if(num % i == 0) {
 
      return true;
 
    }
 
  }
 
  return false;
 
}

4. 篩選算法

更高效地素數判斷方法應該是將素數預先保存到一個素數表中,當判斷一個數是否為素數時,直接查表即可。這種方法需要解決兩個問題:

(1) 怎樣快速得到素數表?(采用篩選方法)
(2) 怎樣減少素數表的大???(采用位圖數據結構)

對于1到n全部整數,逐個判斷它們是否是素數,找出一個非素數,就把它挖掉,最后剩下的就是素數。具體方法是:

<1> 定義is_primer[i] = true;
<2> 從2開始,依次遍歷整個is_primer(直到sqrt(N)),如果is_primer[i]=true,則is_primer[n*i]=false
如1,2,3,4,5,6,7,8,9,10,則
從2開始遍歷:
is_primer[2]=true,則is_primer[4]= is_primer[6]= is_primer[8]= is_primer[10]= true
is_primer[3]=true,則is_primer[6]= is_primer[9]= true
為了減少內存使用率,算法使用了位圖數據結構,關于位圖,可參考://www.49028c.com/article/54439.htm

復制代碼 代碼如下:

bool load_primer_table1() { //保存素數表
 
  int i;
 
  for(i = 1; i < INT_MAX; i++) {
 
    if(i % 2 != 0 //偶數一定不是素數
 
      && is_primer2(i)) {
 
      set(i);
 
    }
 
  }
 
}
 
bool load_primer_table2() {//另一種更快的方法保存素數表
 
  int i, j;
 
  for(i = 1; i <= INT_MAX; i++) {
 
    if( i % 2) {
 
      set(i);
 
    } else {
 
      clear(i);
 
    }
 
  }
 
  int upper = sqrt(INT_MAX);
 
  for(i = 1; i <= upper; i++) {
 
    if(test(i)) {
 
      for(j = i + i; j < INT_MAX; j += i)
 
        set(i);
 
    }
 
  }
 
}
 
bool is_primer3(long num) { //查表判斷是否為素數
 
  if(test(num))
 
    return true;
 
  return false;
 
}

5. 優化的篩選算法

(1) 存儲方式優化

仍然采用位圖方式存儲,只不過是位圖中只存儲奇數,這樣一下子節省了一半空間(需要的空間僅為4G/(32*2)=64MB)
存儲空間優化后,算法效率也會提升很多,如:1,2,…,30
只需存儲3,5,7,9,11,13,15,17,19,21,23,25,27,29
i=0, is_primer[0] =true, 把下標[3][6][9][12],即9,15,21,27,標為false
i=1, s_primer[0] =true,把下標為[6][11],即15,25標為false
i=2, 2*i+3>sqrt(30),結束
即:i=s, 把下標為s(2*t+1)+3t,其中,t=1,2,3,…中所有的的is_primer置為false

(2) 優化刪選算法

a是素數,則下一個起點是a*a,把后面的所有的a*a+2*i*a篩掉。即欲求n以內的素數,就先把sqrt(n)內的素數求出來,用已經求得的素數來篩出后面的合數。

6. 總結

至今為止,沒有任何人發現素數的分布規律,也沒有人能用一個公式計算出所有的素數。關于素數的很多的有趣的性質或者科學家的努力,如:

(1) 高斯猜測,n以內的素數個數大約與n/ln(n)相當,或者說,當n很大時,兩者數量級相同。這就是著名的素數定理。

(2) 十七世紀費馬猜測,2的2^n次方+1,n=0,1,2…時是素數,這樣的數叫費馬素數,可惜當n=5時,2^32+1就不是素數,至今也沒有找到第六個費馬素數。

(3) 18世紀發現的最大素數是2^31-1,19世紀發現的最大素數是2^127-1,20世紀末人類已知的最大素數是2^859433-1,用十進制表示,這是一個258715位的數字。

(4) 孿生素數猜想:差為2的素數有無窮多對。目前知道的最大的孿生素數是1159142985×2^2304-1和1159142985×2^2304+1。

(5) 歌德巴赫猜想:大于2的所有偶數均是兩個素數的和,大于5的所有奇數均是三個素數之和。其中第二個猜想是第一個的自然推論,因此歌德巴赫猜想又被稱為1+1問題。我國數學家陳景潤證明了1+2,即所有大于2的偶數都是一個素數和只有兩個素數因數的合數的和。國際上稱為陳氏定理。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧洲成人午夜免费大片| 国产精品69久久久久| 久久五月情影视| 国产精品丝袜久久久久久不卡| 91精品国产一区| 国产日韩欧美在线播放| 欧美日韩国产999| 成人免费在线视频网站| 国产精品女视频| 久久国产色av| 国产精品高潮呻吟久久av黑人| 国产精品欧美日韩一区二区| 亚洲视频视频在线| 精品国产欧美一区二区五十路| 日韩a**中文字幕| 亚洲最大福利视频网| 国产美女精品视频| 日本伊人精品一区二区三区介绍| 欧美日韩国产一区二区| 97香蕉超级碰碰久久免费的优势| 国产成人精品av在线| 日韩在线欧美在线国产在线| 国产一区二区三区毛片| 成人欧美一区二区三区在线湿哒哒| 日韩av在线网站| 国产精品v日韩精品| 91最新在线免费观看| 欧美性猛交xxxx富婆| 欧美精品18videos性欧美| 亚洲欧洲国产一区| 日韩中文字幕在线精品| 成人免费视频a| 国产成人一区二区三区小说| 久久亚洲精品中文字幕冲田杏梨| 亚洲人精品午夜在线观看| 国产91在线播放九色快色| 国产精品视频自拍| 国产精国产精品| 国产亚洲欧美aaaa| 中文字幕日韩精品在线| 亚洲国产成人在线视频| 色综合五月天导航| 国产在线观看一区二区三区| 欧美日本精品在线| 欧美成年人视频网站| 亚洲三级免费看| 7m精品福利视频导航| 精品亚洲一区二区三区在线观看| 日韩久久免费电影| 国产精品福利在线观看| 国产精品99久久久久久www| 91精品国产91久久久久久最新| 黑人极品videos精品欧美裸| 亚洲第一精品自拍| 超碰精品一区二区三区乱码| 中文字幕欧美日韩精品| 91久热免费在线视频| 亚洲欧洲在线视频| 日日噜噜噜夜夜爽亚洲精品| 97在线视频观看| 国产成人精品一区二区三区| 精品国产乱码久久久久久虫虫漫画| 国产精品一区二区三区毛片淫片| 亚洲香蕉av在线一区二区三区| 在线视频亚洲欧美| 国产欧美精品xxxx另类| 亚洲a在线观看| www.xxxx精品| 日韩欧美在线网址| 精品视频在线播放色网色视频| 国产成人精品视频在线观看| 亚洲欧美日韩中文在线| 久久琪琪电影院| 欧美成人黑人xx视频免费观看| 欧美第一黄网免费网站| 欧美另类暴力丝袜| 日韩免费观看网站| 午夜精品一区二区三区在线播放| 国产z一区二区三区| 日韩av中文在线| 91精品国产高清久久久久久久久| 久操成人在线视频| 欧美大荫蒂xxx| 亚洲精品国产免费| 国产精品久久久久久久天堂| 精品在线小视频| 欧美激情在线观看| 欧美第一页在线| 日韩国产精品一区| 久久久噜噜噜久久| 欧美成人免费在线观看| 久久久久久噜噜噜久久久精品| 国产欧美日韩视频| 成人免费视频在线观看超级碰| 亚洲午夜精品久久久久久久久久久久| 日韩人在线观看| 91久久久久久久久久久久久| 91久久久久久国产精品| 欧美区在线播放| 亚洲国产高清高潮精品美女| 欧美大尺度电影在线观看| 日韩在线资源网| 中文字幕亚洲无线码在线一区| 91av在线免费观看| 欧美性猛交xxxx黑人猛交| 精品一区二区三区四区| 欧美成人免费全部观看天天性色| 久久精品最新地址| 国产精品九九久久久久久久| 日韩欧美在线看| 亚洲人午夜精品免费| 夜夜躁日日躁狠狠久久88av| 亚洲国产天堂网精品网站| 精品国产拍在线观看| 宅男66日本亚洲欧美视频| 亚洲欧美激情视频| 日韩电影网在线| 国产午夜精品视频免费不卡69堂| 国产z一区二区三区| 日韩视频欧美视频| 中文字幕亚洲欧美日韩在线不卡| www.亚洲免费视频| 中文字幕欧美在线| 亚洲一区二区三区视频| 国产伊人精品在线| 日韩av中文字幕在线免费观看| 欧美另类极品videosbest最新版本| 欧美成人午夜激情在线| 日韩女优人人人人射在线视频| 九九视频直播综合网| 色999日韩欧美国产| 亚洲精品国产拍免费91在线| 欧美午夜激情在线| 日本欧美一二三区| 日韩国产高清视频在线| 一区二区三区视频免费在线观看| 亚洲午夜av久久乱码| 一区二区欧美激情| 国产成人精品综合久久久| 成人国产在线视频| 亚洲精品国产成人| 亚洲国产欧美一区二区三区久久| 日韩美女视频中文字幕| 欧美黑人巨大xxx极品| 性欧美xxxx视频在线观看| 国产精品福利无圣光在线一区| 国产在线视频欧美| 国产欧美精品久久久| 亚洲天堂av在线免费观看| 国内精品久久久久久中文字幕| 欧美成人网在线| 91中文在线观看| 久久最新资源网| 91成人免费观看网站| 亚洲欧美日韩精品久久| 精品久久久久国产| 高清一区二区三区四区五区| 久久777国产线看观看精品| 日韩在线观看av| 日韩视频在线一区| 亚洲综合中文字幕68页| 亚洲淫片在线视频| 日韩av一区二区在线观看| 亚洲视频一区二区三区|