C++程式:求1到n之間所有素數的和


在這個問題中,我們給定一個數字n。我們的任務是建立一個C++程式來求1到n之間所有素數的和

素數是指只有兩個因數的數。這兩個因數分別是該數本身和1。

讓我們舉個例子來理解這個問題

輸入

n = 15

輸出

41

解釋

1到15之間的素數是2、3、5、7、11、13。它們的和是41。

解決方案

解決這個問題的一個簡單方法是使用迴圈,檢查每個數字是否為素數,並將所有素數加起來。

要檢查一個數字i是否為素數,我們可以迴圈從i到i/2。檢查是否存在可以整除i的數字。如果存在,則該數字不是素數。

程式演示了我們解決方案的工作原理

示例

 線上演示

#include <iostream>
using namespace std;
bool isPrime(int n){
   for(int i = 2; i < n/2; i++){
      if(n%i == 0){
         return false;
      }
   }
   return true;
}
int findPrimeSum(int n){
   int sumVal = 0;
   for(float i = 2; i <= n; i++){
      if(isPrime(i))
         sumVal += i;
   }
   return sumVal;
}
int main(){
   int n = 15;
   cout<<"The sum of prime number between 1 to "<<n<<" is "<<findPrimeSum(n);
   return 0;
}

輸出

The sum of prime number between 1 to 15 is 45

一個有效的解決方案是使用埃拉託斯特尼篩法來查詢素數,並將它們加起來以找到所需的和。

程式演示了我們解決方案的工作原理

示例

 線上演示

#include <iostream>
using namespace std;
int findPrimeSum(int n){
   int arr[n+1] = {0};
   for (int i = 2; i < n; i++) {
      for (int j = i * i; j < n; j+=i) {
         arr[j - 1] = 1;
      }
   }
   int sumVal;
   for (int i = 2; i < n; i++) {
      if (arr[i - 1] == 0)
         sumVal += i;
   }
   return sumVal;
}
int main(){
   int n = 15;
   cout<<"The sum of prime number between 1 to "<<n<<" is "<<findPrimeSum(n);
   return 0;
}

輸出

The sum of prime number between 1 to 15 is 41

更新於: 2020年9月16日

3K+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

立即開始
廣告