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
廣告