Given a positive integer n, compute and return the sum of all prime numbers between 1 and n (inclusive).
Examples:
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.
[Naive Approach] Trial Division Method - O(n^2) time and O(1) space
This method checks each number from 2 to
nfor primality by dividing it by all numbers from 2 toi/2. If any divisor is found, the flag is set to 0, indicating the number is not prime. If no divisors are found, the number is added to the sum. After completing the loop, the sum of all primes up tonis returned.
#include <iostream>
using namespace std;
int prime_Sum(int n) {
int sum = 0;
for (int i = 2; i <= n; i++) {
int flag = 1;
for (int j = 2; j <= i / 2; j++) {
if (i % j == 0) {
flag = 0;
break;
}
}
if (flag) {
sum += i;
}
}
return sum;
}
int main() {
int n = 10;
int result = prime_Sum(n);
cout << result << endl;
return 0;
}
#include <stdio.h>
int primeSum(int n) {
int sum = 0;
for (int i = 2; i <= n; i++) {
int flag = 1;
for (int j = 2; j <= i / 2; j++) {
if (i % j == 0) {
flag = 0;
break;
}
}
if (flag) {
sum += i;
}
}
return sum;
}
int main() {
int n = 10;
int result = primeSum(n);
printf("%d\n", result);
return 0;
}
class GfG {
public int primeSum(int n) {
int sum = 0;
for (int i = 2; i <= n; i++) {
int flag = 1;
for (int j = 2; j <= i / 2; j++) {
if (i % j == 0) {
flag = 0;
break;
}
}
if (flag == 1) {
sum += i;
}
}
return sum;
}
public static void main(String[] args) {
GfG gfg = new GfG();
int n = 10;
int result = gfg.primeSum(n);
System.out.println(result);
}
}
class GfG:
def primeSum(self, n):
sum = 0
for i in range(2, n + 1):
flag = 1
for j in range(2, i // 2 + 1):
if i % j == 0:
flag = 0
break
if flag:
sum += i
return sum
gfg = GfG()
n = 10
result = gfg.primeSum(n)
print(result)
using System;
class GfG
{
public int PrimeSum(int n)
{
int sum = 0;
for (int i = 2; i <= n; i++)
{
int flag = 1;
for (int j = 2; j <= i / 2; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
{
sum += i;
}
}
return sum;
}
static void Main(string[] args)
{
GfG gfg = new GfG();
int n = 10;
int result = gfg.PrimeSum(n);
Console.WriteLine(result);
}
}
function primeSum(n) {
let sum = 0;
for (let i = 2; i <= n; i++) {
let flag = 1;
for (let j = 2; j <= i / 2; j++) {
if (i % j === 0) {
flag = 0;
break;
}
}
if (flag) {
sum += i;
}
}
return sum;
}
let n = 10;
let result = primeSum(n);
console.log(result);
Output
17
[Better Approach] Square Root Method - O(n*sqrt(n)) time and O(1) space
To optimize the above method, we check whether a number is prime by iterating only up to the square root of the number. This approach checks each number from 2 to
nfor primality by testing divisibility up to its square root. If a number is prime (i.e., it has no divisors other than 1 and itself), it is added to the sum. Finally, the sum of all prime numbers up tonis returned.
#include <iostream>
#include <cmath>
using namespace std;
int prime_Sum(int n) {
int sum = 0;
for (int i = 2; i <= n; i++) {
int flag = 1;
for (int j = 2; j <= sqrt(i); j++) {
if (i % j == 0) {
flag = 0;
break;
}
}
if (flag) {
sum += i;
}
}
return sum;
}
int main() {
int n = 10;
int result = prime_Sum(n);
cout << result << endl;
return 0;
}
#include <stdio.h>
#include <math.h>
int primeSum(int n) {
int sum = 0;
for (int i = 2; i <= n; i++) {
int flag = 1;
for (int j = 2; j <= sqrt(i); j++) {
if (i % j == 0) {
flag = 0;
break;
}
}
if (flag == 1) {
sum += i;
}
}
return sum;
}
int main() {
int n = 10;
int result = primeSum(n);
printf("%d\n", result);
return 0;
}
import java.util.*;
public class GfG {
public static int primeSum(int n) {
int sum = 0;
for (int i = 2; i <= n; i++) {
int flag = 1;
for (int j = 2; j <= Math.sqrt(i); j++) {
if (i % j == 0) {
flag = 0;
break;
}
}
if (flag == 1) {
sum += i;
}
}
return sum;
}
public static void main(String[] args) {
int n = 10;
int result = primeSum(n);
System.out.println(result);
}
}
import math
def prime_sum(n):
sum = 0
for i in range(2, n + 1):
flag = 1
for j in range(2, int(math.sqrt(i)) + 1):
if i % j == 0:
flag = 0
break
if flag:
sum += i
return sum
n = 10
result = prime_sum(n)
print(result)
using System;
class GfG {
public static int PrimeSum(int n) {
int sum = 0;
for (int i = 2; i <= n; i++) {
int flag = 1;
for (int j = 2; j <= Math.Sqrt(i); j++) {
if (i % j == 0) {
flag = 0;
break;
}
}
if (flag == 1) {
sum += i;
}
}
return sum;
}
static void Main() {
int n = 10;
int result = PrimeSum(n);
Console.WriteLine(result);
}
}
function primeSum(n) {
let sum = 0;
for (let i = 2; i <= n; i++) {
let flag = 1;
for (let j = 2; j <= Math.sqrt(i); j++) {
if (i % j === 0) {
flag = 0;
break;
}
}
if (flag) {
sum += i;
}
}
return sum;
}
let n = 10;
let result = primeSum(n);
console.log(result);
Output
17
[Expected Approach] Using Sieve of Eratosthenes - O(nloglogn) time and O(n) space
The idea is to use Sieve of Eratosthenes to efficiently check which numbers are prime in the range from 1 to n.
This process marks all prime numbers up to
nby iterating through the numbers and marking their multiples as non-prime. After completing the marking, it sums up all the numbers that remain marked as prime.
#include <iostream>
#include <vector>
using namespace std;
// Returns sum of primes in range from 1 to n.
int sumOfPrimes(int n)
{
vector<bool> prime(n + 1, true);
// 0 and 1 are not prime numbers
prime[0] = prime[1] = false;
for (int p = 2; p * p <= n; p++) {
// If prime[p] is true, it is a prime
if (prime[p]) {
// Mark all multiples of p as non-prime
for (int i = p * p; i <= n; i += p)
prime[i] = false;
}
}
// Return sum of primes
int sum = 0;
for (int i = 2; i <= n; i++)
if (prime[i])
sum += i;
return sum;
}
int main()
{
int n = 10;
cout << sumOfPrimes(n);
return 0;
}
// Returns sum of primes in range from 1 to n.
public class GfG {
public static int sumOfPrimes(int n) {
// Array to store prime numbers
boolean[] prime = new boolean[n + 1];
for (int i = 0; i <= n; i++) prime[i] = true;
// 0 and 1 are not prime numbers
prime[0] = prime[1] = false;
for (int p = 2; p * p <= n; p++) {
// If prime[p] is true, it is a prime
if (prime[p]) {
// Mark all multiples of p as non-prime
for (int i = p * p; i <= n; i += p)
prime[i] = false;
}
}
// Return sum of primes
int sum = 0;
for (int i = 2; i <= n; i++)
if (prime[i])
sum += i;
return sum;
}
public static void main(String[] args) {
int n = 10;
System.out.println(sumOfPrimes(n));
}
}
# Returns sum of primes in range from 1 to n.
def sum_of_primes(n):
# List to store prime numbers
prime = [True] * (n + 1)
# 0 and 1 are not prime numbers
prime[0] = prime[1] = False
for p in range(2, int(n**0.5) + 1):
# If prime[p] is true, it is a prime
if prime[p]:
# Mark all multiples of p as non-prime
for i in range(p * p, n + 1, p):
prime[i] = False
# Return sum of primes
return sum(i for i in range(2, n + 1) if prime[i])
n = 10
print(sum_of_primes(n))
// Returns sum of primes in range from 1 to n.
using System;
using System.Collections.Generic;
class GfG {
public static int SumOfPrimes(int n) {
// List to store prime numbers
bool[] prime = new bool[n + 1];
for (int i = 0; i <= n; i++) prime[i] = true;
// 0 and 1 are not prime numbers
prime[0] = prime[1] = false;
for (int p = 2; p * p <= n; p++) {
// If prime[p] is true, it is a prime
if (prime[p]) {
// Mark all multiples of p as non-prime
for (int i = p * p; i <= n; i += p)
prime[i] = false;
}
}
// Return sum of primes
int sum = 0;
for (int i = 2; i <= n; i++)
if (prime[i])
sum += i;
return sum;
}
static void Main() {
int n = 10;
Console.WriteLine(SumOfPrimes(n));
}
}
// Returns sum of primes in range from 1 to n.
function sumOfPrimes(n) {
// Array to store prime numbers
const prime = new Array(n + 1).fill(true);
// 0 and 1 are not prime numbers
prime[0] = prime[1] = false;
for (let p = 2; p * p <= n; p++) {
// If prime[p] is true, it is a prime
if (prime[p]) {
// Mark all multiples of p as non-prime
for (let i = p * p; i <= n; i += p)
prime[i] = false;
}
}
// Return sum of primes
let sum = 0;
for (let i = 2; i <= n; i++)
if (prime[i])
sum += i;
return sum;
}
const n = 10;
console.log(sumOfPrimes(n));
Output
17