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+ 浏览量

开启你的职业生涯

通过完成课程获得认证

立即开始
广告