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

篩選法的C++實現(xiàn)

 更新時間:2013年10月21日 09:24:49   作者:  
篩選法又稱篩法,是求不超過自然數(shù)N(N>1)的所有質(zhì)數(shù)的一種方法。據(jù)說是古希臘的埃拉托斯特尼(Eratosthenes,約公元前274~194年)發(fā)明的,又稱埃拉托斯特尼篩子

篩選法

介紹:
篩選法又稱篩法,是求不超過自然數(shù)N(N>1)的所有質(zhì)數(shù)的一種方法。據(jù)說是古希臘的埃拉托斯特尼(Eratosthenes,約公元前274~194年)發(fā)明的,又稱埃拉托斯特尼篩子。

具體做法是:先把N個自然數(shù)按次序排列起來。1不是質(zhì)數(shù),也不是合數(shù),要劃去。第二個數(shù)2是質(zhì)數(shù)留下來,而把2后面所有能被2整除的數(shù)都劃去。2后面第一個沒劃去的數(shù)是3,把3留下,再把3后面所有能被3整除的數(shù)都劃去。3后面第一個沒劃去的數(shù)是5,把5留下,再把5后面所有能被5整除的數(shù)都劃去。這樣一直做下去,就會把不超過N的全部合數(shù)都篩掉,留下的就是不超過N的全部質(zhì)數(shù)。因為希臘人是把數(shù)寫在涂臘的板上,每要劃去一個數(shù),就在上面記以小點,尋求質(zhì)數(shù)的工作完畢后,這許多小點就像一個篩子,所以就把埃拉托斯特尼的方法叫做“埃拉托斯特尼篩”,簡稱“篩法”。(另一種解釋是當時的數(shù)寫在紙草上,每要劃去一個數(shù),就把這個數(shù)挖去,尋求質(zhì)數(shù)的工作完畢后,這許多小洞就像一個篩子。)

用C++實現(xiàn)篩選法:
以通過篩選法求100以內(nèi)的素數(shù)為例

復(fù)制代碼 代碼如下:

#include<iostream>
using namespace std;
int main()
{
 int i,j,a[101];//這里定義101大小的數(shù)組,是為了和自然數(shù)相對應(yīng),即:a[2]對應(yīng)自然數(shù)2
 for(i=2;i<100;i++)
     a[i]=1;//完成對數(shù)組的初始化操作
 for(i=2;i<100;i++){
  for(j=2*i;j<100;j+=i){
   a[j]=0;//對相應(yīng)的倍數(shù)進行排除
  }
 }
 //執(zhí)行輸出操作
 for(i=2;i<100;i++){
  if(a[i])
  cout<<i<<'\t';
 }
 cout<<endl;
 return 0;
}

一些思考和優(yōu)化
以前學(xué)習(xí)計算素數(shù)的算法的時候,有一個比較普遍的優(yōu)化的算法。

也就是用

復(fù)制代碼 代碼如下:

for(i=1;i<(j/2);i++)

或者
復(fù)制代碼 代碼如下:

for(i=1;i<sqrt(j);i++)//使用sqrt()函數(shù)需要引入math.h這個頭文件

來替代
復(fù)制代碼 代碼如下:

for(i=1;i<j;i++)

可以顯著的降低算法的復(fù)雜度

一開始直接使用,不知道是什么原理。后來看了看,原來原理是這樣的:

以sqrt(j)代替i為例

求素數(shù)最基本的方法,是用i去除以2到j(luò)-1之間的所有的整數(shù),如果有可以整除的情況,則不是素數(shù);如果都不可以整除,則是素數(shù)。

而i=sqrt(j)*sqrt(j)

我們用i去除以2到sqrt(j)之間的所有的整數(shù),這就可以覆蓋2到i-1之間的所有的整數(shù)。

設(shè)2<k<sqrt(j),則若j%k==0,則sqrt(j)<m=(j%k)<j-1。

也就是說,因為是除法運算求整除的運算,所以除以小的可以整除,可就是除以相應(yīng)的大的可以整除。

優(yōu)化之后的代碼:

復(fù)制代碼 代碼如下:

#include<iostream>
#include<math.h>
using namespace std;
int main()
{
 int i,j,a[101];//這里定義101大小的數(shù)組,是為了和自然數(shù)相對應(yīng),即:a[2]對應(yīng)自然數(shù)2
 for(i=2;i<100;i++)
     a[i]=1;//完成對數(shù)組的初始化操作
 for(i=2;i<sqrt(100);i++){
  for(j=2*i;j<100;j+=i){
   a[j]=0;//對相應(yīng)的倍數(shù)進行排除
  }
 }
 //執(zhí)行輸出操作
 for(i=2;i<100;i++){
  if(a[i])
  cout<<i<<'\t';
 }
 cout<<endl;
 return 0;
}

相關(guān)文章

  • OpenGL實現(xiàn)鼠標移動方塊

    OpenGL實現(xiàn)鼠標移動方塊

    這篇文章主要為大家詳細介紹了OpenGL實現(xiàn)鼠標移動方塊,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • 淺談C++中虛函數(shù)實現(xiàn)原理揭秘

    淺談C++中虛函數(shù)實現(xiàn)原理揭秘

    下面小編就為大家?guī)硪黄獪\談C++中虛函數(shù)實現(xiàn)原理揭秘。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • C++預(yù)定義的流對象基本示例詳解

    C++預(yù)定義的流對象基本示例詳解

    這篇文章主要為大家介紹了C++預(yù)定義的流對象基本示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • QT使用SQLite數(shù)據(jù)庫超詳細教程(增刪改查、對大量數(shù)據(jù)快速存儲和更新)

    QT使用SQLite數(shù)據(jù)庫超詳細教程(增刪改查、對大量數(shù)據(jù)快速存儲和更新)

    這篇文章主要給大家介紹了關(guān)于QT使用SQLite數(shù)據(jù)庫的相關(guān)資料,其中包括增刪改查以及對大量數(shù)據(jù)快速存儲和更新,SQLite是一種嵌入式關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它是一個軟件庫,提供了一個自包含、無服務(wù)器、零配置的、事務(wù)性的SQL數(shù)據(jù)庫引擎,需要的朋友可以參考下
    2024-01-01
  • C++實戰(zhàn)之二進制數(shù)據(jù)處理與封裝

    C++實戰(zhàn)之二進制數(shù)據(jù)處理與封裝

    在電腦上一切數(shù)據(jù)都是通過二進制(0或1)進行存儲的,通過多位二進制數(shù)據(jù)可以進而表示整形、浮點型、字符、字符串等各種基礎(chǔ)類型數(shù)據(jù)或者一些更復(fù)雜的數(shù)據(jù)格式。本文將為大家詳細講講二進制數(shù)據(jù)處理與封裝,需要的可以參考一下
    2022-08-08
  • C++二分查找在搜索引擎多文檔求交的應(yīng)用分析

    C++二分查找在搜索引擎多文檔求交的應(yīng)用分析

    這篇文章主要介紹了C++二分查找在搜索引擎多文檔求交的應(yīng)用,實例分析了二分查找的原理與C++的實現(xiàn)及應(yīng)用技巧,需要的朋友可以參考下
    2015-06-06
  • C++?socket通信遇到的問題及解決方法

    C++?socket通信遇到的問題及解決方法

    這篇文章主要介紹了C++?socket通信遇到的問題,通過代碼修改來解決這個問題,本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-08-08
  • 用C語言模仿Python函數(shù)的實例

    用C語言模仿Python函數(shù)的實例

    下面小編就為大家?guī)硪黄肅語言模仿Python函數(shù)的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 詳解C++?中?shared_ptr?weak_ptr

    詳解C++?中?shared_ptr?weak_ptr

    shared_ptr?是一個標準的共享所有權(quán)的智能指針,允許多個指針指向同一個對象,定義在?memory?文件中,命名空間為?std,這篇文章主要介紹了C++?中?shared_ptr?weak_ptr,需要的朋友可以參考下
    2022-07-07
  • C++之談?wù)剺?gòu)造函數(shù)的初始化列表

    C++之談?wù)剺?gòu)造函數(shù)的初始化列表

    構(gòu)造函數(shù)主要作用在于創(chuàng)建對象時為對象的成員屬性賦值,構(gòu)造函數(shù)由編譯器自動調(diào)用,無須手動調(diào)用,這篇文章詳細介紹了構(gòu)造函數(shù)的初始化列表,文章中有詳細的示例代碼,感興趣的同學(xué)可以參考閱讀
    2023-04-04

最新評論

景德镇市| 绥江县| 平塘县| 澄城县| 安乡县| 喀喇沁旗| 咸丰县| 呼玛县| 华坪县| 富阳市| 封丘县| 民丰县| 锦州市| 阆中市| 定安县| 清苑县| 鹰潭市| 西充县| 博兴县| 富锦市| 长治县| 缙云县| 深泽县| 凤台县| 南涧| 集贤县| 长子县| 射洪县| 旬邑县| 铜鼓县| 高要市| 花垣县| 海丰县| 东港市| 永善县| 阜新市| 绵竹市| 南漳县| 景德镇市| 高碑店市| 鄂托克旗|