- Problems will start getting harder, so I may be solving problems with less frequency
- I will need to expand to a class of languages I have tried to avoid as much as possible: really old languages like ALGOL and COBOL (and anything that is spelled in all-caps).
- I have reached 'Level 2' on Project Euler (which just means I get a fancy little check mark on my profile page, and the satisfaction of being in the top 7.45% of users).
Also, I decided that, to mark this occasion, I would move all of my code from Dropbox, which just seems like a very informal place to be hosting code, to github, which seems far more legitimate, plus offers a viewer with syntax highlighting for more languages than just Java. I will continue inlining the code here, but the links from the table will now all point to github.
Anyway, here is my code for problem 50, and hopefully I will solve 50 more in due time.
#include<stdio.h>
#include<stdlib.h>
int isPrime(int n) {
if (n < 2 || n % 2 == 0) {
return n == 2;
}
int i = 3;
for (i = 3; i*i <= n; ++i) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
int partialSum(int* arr, int begin, int end) {
int sum = 0;
int i;
for (i = begin; i < end; ++i) {
sum += arr[i];
}
return sum;
}
int main(int argc, char** argv) {
int ans = 0;
int chainLength = 1;
//78498 = pi^-1(1000000)
int* primes = (int*)malloc(78498 * sizeof(int));
int i = 2;
int c = 0;
//make list of primes
for (i = 0; i < 1000000; ++i) {
if (isPrime(i)) {
primes[c] = i;
++c;
}
}
int j;
for (i = 0; i < 78498; ++i) {
for (j = i+chainLength; j < 78498; ++j) {
int temp = partialSum(primes,i,j);
if (temp > 1000000) {
break;
}
if (isPrime(temp)) {
ans = temp > ans ? temp : ans;
chainLength = j - i;
}
}
}
printf("%d\n",ans);
return 0;
}
No comments:
Post a Comment