首頁>Club>
7
回覆列表
  • 1 # 使用者2063441173210

    給定兩個整數n和m,0<n<=m<=200,編寫程式計算第n個素數到第m個素數之間所有的素數的和,包括第n個素數和第m個素數。

    注意:是第n個素數到第m個素數,不是n和m之間的素數!

    輸入格式:

    兩個正整數,第一個表示n,第二個表示m。

    輸出格式:

    輸出所求的和。

    輸入樣例:

    2 4

    輸出樣例:

    15

    問題分析

    素數:因數只有1和它本身的數(即只能被1和它本身整除);

    首先在無限個數裡迴圈篩選出素數,用一個計數器,每有一個素數就加1;

    當素數計數器在n和m之間時,sum累加,當計數器等於m時,輸出sum;

    在這段程式碼裡面定義的bool b=0是用了之前第四章筆記中寫到的標記變數【C++】第4章:(二)素數演算法問題中的break,continue和標記變數

    當遇到素數時b=1,跳出迴圈,這樣用b=0和b=1區別開是否是素數。在每次迴圈之前要重新給b賦值0,之前忘記重新賦值就出錯了;

    程式碼如下:

    #include <iostream>

    #include <cmath>

    using namespace std;

    int main()

    {

    int n,m,i,a,count=0,sum=0;

    bool b=0;//標記變數

    cin>>n>>m; //0<n<=m<200

    for(i=2;;i++){ //迴圈2~無窮的所有數

    b=0;//每次篩選之前定義標記變數b=0

    for(a=2;a<=sqrt(i);a++){ //篩選素數

    if(i%a==0) {

    b=1;//區分開是否是素數

    break;//b不是素數就重新篩選

    }

    }

    if(b==0) {

    count++;//每有一個素數計數器加1,記錄是第幾個素數

    if ((count>=n)&&(count<=m)){

    sum+=i;//當是第n到第m個素數時,sum總數累加

    }

    }

    if(count==m){//當到第m個素數時,輸出sum

    cout<<sum<<endl;

    break;//結束2~無窮的迴圈

    }

    }

    return 0;

    }

  • 中秋節和大豐收的關聯?
  • 日俄領土爭端是如何形成的,日本有無可能拿回爭議領土?