#include #include void printPrimes(int,int); int prime(int value) { unsigned int divisor = 3; unsigned int square = divisor * divisor; if (value == 0) return 0; if (value == 2) return 1; if (value == 3) return 1; if (!(value & 1)) return 0; /* even */ while (square < value && value % divisor) { ++divisor; square += 4 * divisor; ++divisor; } return value % divisor != 0; } int main() { int i,j,res,count,max; int best = 1; count = 1; //acocunt for "1" res = 0; max = 1000000; for (i = 2; i < max; i++) { if (prime(i)) { //printf("%u",i); j = getMaxPrimes(i); if (j > res) { printf("Starting with %u ",i); printf("got %u primes.\n",j); res = j; best = i; } } } printPrimes(best,res); return 0; } int getMaxPrimes(int i) { int sum,tot,max,maxtot; sum = i; tot = 0; max = 1000000; maxtot = 0; do { i++; tot++; while (! prime(i)) { i++; } sum += i; if (prime(sum)) { //printf("%u: %u for %u\n",sum,); maxtot = tot; } } while (sum < max); return maxtot; } void printPrimes(int i,int numterms) { int sum,tot,max,maxtot; sum = i; tot = 0; max = 1000000; maxtot = 0; printf("%u",i); do { i++; tot++; while (! prime(i)) { i++; } printf("->%u",i); sum += i; if (prime(sum)) { //printf("%u: %u for %u\n",sum,); maxtot = tot; } } while (tot < numterms); printf("\n"); printf("Sum: %u\n",sum); }