Problem 10
- 配列の練習
- 答えは int だとオーバーフローする
using System;
using System.IO;
using System.Collections.Generic;
public class P010 {
static List<int> sieve(int n) {
bool[] xs = new bool[n+1];
for (int i = 0; i <= n; i++) {
xs[i] = true; // i を素数としてマーク
}
for (int i = 3; i <= n; i += 2) {
if (xs[i]) { // 素数ならば
int p = i + i;
while (p <= n) {
xs[p] = false; // 素数マークを外す
p += i;
}
}
}
var primes = new List<int>();
primes.Add(2);
for (int i = 3; i <= n; i += 2) {
if (xs[i]) {
primes.Add(i);
}
}
return primes;
}
public static void Main() {
var primes = sieve(2000000);
long ans = 0;
foreach (int p in primes) {
ans += p;
}
Console.WriteLine(ans);
}
}