Project Euler problem 50
2012-11-06 15:13
197 查看
暴力搞之
首先要记录的是从第1个素数到第 i个素数的连续和
这样任意连续区间的素数和就能在O(1)时间内搞出来
然后就枚举就行了。
首先要记录的是从第1个素数到第 i个素数的连续和
这样任意连续区间的素数和就能在O(1)时间内搞出来
然后就枚举就行了。
#include <iostream> #include <cstdio> #include <cstring> #include <ctime> #include <cstdlib> #include <algorithm> #include <stack> #include <cmath> #include <vector> #define eps 1e-6 #define INF 1000000007 #define PI acos(-1.0) using namespace std; bool tag[1000001]; int p[1000001]; int cnt; void get_prime() //筛出5000000内素数 { cnt = 0; tag[1] = 1; for (int i = 2; i < 1000000; i++) { if (!tag[i]) p[cnt++] = i; for (int j = 0; j < cnt && p[j] * i < 1000000; j++) { tag[i*p[j]] = 1; if (i % p[j] == 0) break; } } } long long sum[500005]; int main() { get_prime(); for(int i = 1; i <= cnt; i++) sum[i] = sum[i - 1] + p[i - 1]; int ans = 0, pos; for(int i = cnt - 1; i >= 0; i--) { for(int j = i - 1; j >= 0; j--) { if(sum[i + 1] - sum[j + 1] >= 1000000) break; if(!tag[sum[i + 1] - sum[j + 1]]) { if(i - j > ans) { ans = i - j; pos = sum[i + 1] - sum[j + 1]; } } } } cout << pos << endl; return 0; }
相关文章推荐
- Project Euler Problem 50
- 斐波那契数列偶数项求和(Project Euler Problem 2)
- Project Euler Problem 21
- Project Euler Problem 1: Multiples of 3 and 5
- Project Euler Problem 12: Highly divisible triangular number
- Project Euler problem 9 勾股数
- Project Euler problem 29
- Project Euler problem 40
- Project Euler Problem 22
- http://projecteuler.net/problem=14 [Answer:837799]
- Euler Project Problem 6
- Project Euler problem 62
- project euler problem 16:2^1000结果各位数求和
- Project euler problem 21找合适的一对数之总和
- Project Euler Problem 30
- project euler problem 30
- Project Euler problem 30
- Project Euler Problem 24 Lexicographic permutations
- Project Euler problem 41
- Project Euler Problem 34 Digit factorials