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

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

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

篩選法

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

具體做法是:先把N個(gè)自然數(shù)按次序排列起來(lái)。1不是質(zhì)數(shù),也不是合數(shù),要?jiǎng)澣?。第二個(gè)數(shù)2是質(zhì)數(shù)留下來(lái),而把2后面所有能被2整除的數(shù)都劃去。2后面第一個(gè)沒(méi)劃去的數(shù)是3,把3留下,再把3后面所有能被3整除的數(shù)都劃去。3后面第一個(gè)沒(méi)劃去的數(shù)是5,把5留下,再把5后面所有能被5整除的數(shù)都劃去。這樣一直做下去,就會(huì)把不超過(guò)N的全部合數(shù)都篩掉,留下的就是不超過(guò)N的全部質(zhì)數(shù)。因?yàn)橄ED人是把數(shù)寫在涂臘的板上,每要?jiǎng)澣ヒ粋€(gè)數(shù),就在上面記以小點(diǎn),尋求質(zhì)數(shù)的工作完畢后,這許多小點(diǎn)就像一個(gè)篩子,所以就把埃拉托斯特尼的方法叫做“埃拉托斯特尼篩”,簡(jiǎn)稱“篩法”。(另一種解釋是當(dāng)時(shí)的數(shù)寫在紙草上,每要?jiǎng)澣ヒ粋€(gè)數(shù),就把這個(gè)數(shù)挖去,尋求質(zhì)數(shù)的工作完畢后,這許多小洞就像一個(gè)篩子。)

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

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

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

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

也就是用

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

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

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

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

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

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

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

一開(kāi)始直接使用,不知道是什么原理。后來(lái)看了看,原來(lái)原理是這樣的:

以sqrt(j)代替i為例

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

也就是說(shuō),因?yàn)槭浅ㄟ\(yùn)算求整除的運(yùn)算,所以除以小的可以整除,可就是除以相應(yīng)的大的可以整除。

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

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

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

相關(guān)文章

  • OpenGL實(shí)現(xiàn)鼠標(biāo)移動(dòng)方塊

    OpenGL實(shí)現(xiàn)鼠標(biāo)移動(dòng)方塊

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

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

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

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

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

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

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

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

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

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

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

    C++?socket通信遇到的問(wèn)題及解決方法

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

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

    下面小編就為大家?guī)?lái)一篇用C語(yǔ)言模仿Python函數(shù)的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • 詳解C++?中?shared_ptr?weak_ptr

    詳解C++?中?shared_ptr?weak_ptr

    shared_ptr?是一個(gè)標(biāo)準(zhǔn)的共享所有權(quán)的智能指針,允許多個(gè)指針指向同一個(gè)對(duì)象,定義在?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)建對(duì)象時(shí)為對(duì)象的成員屬性賦值,構(gòu)造函數(shù)由編譯器自動(dòng)調(diào)用,無(wú)須手動(dòng)調(diào)用,這篇文章詳細(xì)介紹了構(gòu)造函數(shù)的初始化列表,文章中有詳細(xì)的示例代碼,感興趣的同學(xué)可以參考閱讀
    2023-04-04

最新評(píng)論

建宁县| 罗平县| 依兰县| 西青区| 马鞍山市| 申扎县| 柘荣县| 盘山县| 嘉义县| 察隅县| 洛川县| 汕尾市| 鹿邑县| 新野县| 仪征市| 综艺| 重庆市| 崇仁县| 靖江市| 广汉市| 新密市| 河北区| 吉水县| 佛教| 伽师县| 进贤县| 洪江市| 井冈山市| 唐海县| 崇仁县| 三台县| 偏关县| 沭阳县| 尤溪县| 太和县| 广宁县| 鲜城| 浑源县| 临城县| 邯郸市| 宜川县|