給定兩個整數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;
給定兩個整數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;
}