int main() { int input; int maxnumfactors = 0; int trinum = 0; int i, j; int *primes; primes = genprimes(); printf("\nPlease input a maximum: \n"); scanf("%d", &input); // find triangle numbers and store number of divisors until input reached for(i=1;maxnumfactors<input;i++){ int thisnumfactors; trinum+=i; thisnumfactors=findfactors(trinum,primes); printf("%d %d\n",trinum,thisnumfactors); if(thisnumfactors>maxnumfactors){ maxnumfactors=thisnumfactors; } } printf("\nMax Factor %d Triangle Number %d\n", maxnumfactors, trinum); return 0; }
int main(int argc, const char *argv[]) { uint64_t total = 0; unsigned long i; // Not checking things is cool. JUST BELIEVE IT WILL WORK AND IT WILL. char *primes = malloc(sizeof(char) * MAXPRIMES); genprimes(primes); for (i = 2; i < MAXPRIMES; i++) { if (primes[i] == TRUE) { total += i; } } printf("Sum of primes < 2,000,000 = %llu\n", total); free(primes); return 0; }
/* * Find the longest sequence of primes under 1,000,000 * whose sum is a prime. */ void eu050(char *ans) { const int N = 1000000; int *primes = malloc(N/2 * sizeof(int)); int n = genprimes(primes, N); char *sieve = malloc(N); gensieve(sieve, N); int *sums = (int *)malloc(n * sizeof(int)); memset(sums, 0, n * sizeof(int)); int t = 0; for (int i = 0; i < n; i++) { t += primes[i]; sums[i] = t; } int maxlen = 0; int maxsum = 0; for (int i = 0; i < n; i++) { for (int j = i; j < n && sums[j]-sums[i] < N; j++) { int sum = sums[j] - sums[i]; if (j - i > maxlen && sieve[sum] == 0) { maxsum = sum; maxlen = j - i; } } } sprintf(ans, "%d", maxsum); free(sums); free(primes); free(sieve); }