编写程序以查找1到n之间所有素数的总和。
例子:
Input : 10
Output : 17
Explanation : Primes between 1 to 10 : 2, 3, 5, 7.
Input : 11
Output : 28
Explanation : Primes between 1 to 11 : 2, 3, 5, 7, 11.
一个简单的解决方案是遍历从1到n的所有数字。对于每个数字,请检查其是否为质数。如果是,则将其添加到结果中。
一个有效的解决方案是使用Eratosthenes筛子查找直到n的所有素数,然后求和。
C++
// C++ program to find sum of primes in
// range from 1 to n.
#include
using namespace std;
// Returns sum of primes in range from
// 1 to n.
int sumOfPrimes(int n)
{
// Array to store prime numbers
bool prime[n + 1];
// Create a boolean array "prime[0..n]"
// and initialize all entries it as true.
// A value in prime[i] will finally be
// false if i is Not a prime, else true.
memset(prime, true, n + 1);
for (int p = 2; p * p <= n; p++) {
// If prime[p] is not changed, then
// it is a prime
if (prime[p] == true) {
// Update all multiples of p
for (int i = p * 2; i <= n; i += p)
prime[i] = false;
}
}
// Return sum of primes generated through
// Sieve.
int sum = 0;
for (int i = 2; i <= n; i++)
if (prime[i])
sum += i;
return sum;
}
// Driver code
int main()
{
int n = 11;
cout << sumOfPrimes(n);
return 0;
}
Java
// Java program to find
// sum of primes in
// range from 1 to n.
import java.io.*;
import java.util.*;
class GFG {
// Returns sum of primes
// in range from
// 1 to n.
static int sumOfPrimes(int n)
{
// Array to store prime numbers
boolean prime[]=new boolean[n + 1];
// Create a boolean array "prime[0..n]"
// and initialize all entries it as true.
// A value in prime[i] will finally be
// false if i is Not a prime, else true.
Arrays.fill(prime, true);
for (int p = 2; p * p <= n; p++) {
// If prime[p] is not changed, then
// it is a prime
if (prime[p] == true) {
// Update all multiples of p
for (int i = p * 2; i <= n; i += p)
prime[i] = false;
}
}
// Return sum of primes generated through
// Sieve.
int sum = 0;
for (int i = 2; i <= n; i++)
if (prime[i])
sum += i;
return sum;
}
// Driver code
public static void main(String args[])
{
int n = 11;
System.out.print(sumOfPrimes(n));
}
}
// This code is contributed
// by Nikita Tiwari.
Python
# Python program to find sum of primes
# in range from 1 to n.
# Returns sum of primes in range from
# 1 to n
def sumOfPrimes(n):
# list to store prime numbers
prime = [True] * (n + 1)
# Create a boolean array "prime[0..n]"
# and initialize all entries it as true.
# A value in prime[i] will finally be
# false if i is Not a prime, else true.
p = 2
while p * p <= n:
# If prime[p] is not changed, then
# it is a prime
if prime[p] == True:
# Update all multiples of p
i = p * 2
while i <= n:
prime[i] = False
i += p
p += 1
# Return sum of primes generated through
# Sieve.
sum = 0
for i in range (2, n + 1):
if(prime[i]):
sum += i
return sum
# Driver code
n = 11
print sumOfPrimes(n)
# This code is contributed by Sachin Bisht
C#
// C# program to find
// sum of primes in
// range from 1 to n.
using System;
class GFG {
// Returns sum of primes
// in range from
// 1 to n.
static int sumOfPrimes(int n)
{
// Array to store prime numbers
bool []prime=new bool[n + 1];
// Create a boolean array "prime[0..n]"
// and initialize all entries it as true.
// A value in prime[i] will finally be
// false if i is Not a prime, else true.
for(int i = 0; i < n + 1; i++)
prime[i] = true;
for (int p = 2; p * p <= n; p++)
{
// If prime[p] is not changed,
// then it is a prime
if (prime[p] == true)
{
// Update all multiples of p
for (int i = p * 2; i <= n; i += p)
prime[i] = false;
}
}
// Return sum of primes
// generated through Sieve.
int sum = 0;
for (int i = 2; i <= n; i++)
if (prime[i])
sum += i;
return sum;
}
// Driver code
public static void Main()
{
int n = 11;
Console.Write(sumOfPrimes(n));
}
}
// This code is contributed by nitin mittal.
PHP
输出:
28