Der findes en video der viser hvordan jeg udvikler programmet. Løsningen herunder svarer til løsningen, som udvikles i den nævnte video.#include <stdio.h>
#include <assert.h>
#include "primes.h"
void goldbach(int lower_limit, int upper_limit);
void test_goldbach_for_number(int i);
int odd(int i);
int even(int i);
int main(void) {
int lower_limit, upper_limit;
printf("Goldbachs Conjecture: Enter lower and upper limits:\n");
scanf("%d %d", &lower_limit, &upper_limit);
goldbach(lower_limit, upper_limit);
return 0;
}
void goldbach(int lower_limit, int upper_limit){
int lower_limit_even, i;
lower_limit_even = odd(lower_limit) ?
lower_limit + 1 : lower_limit;
for(i = lower_limit_even; i <= upper_limit; i += 2)
test_goldbach_for_number(i);
}
/* Test goldbach conjecture for i. Either print the sum of primes,
or a counter example of the conjecture.
Assume as a precondition that i is even */
void test_goldbach_for_number(int i){
int n, m, counter = 0;
assert(even(i));
for(n = 1; n <= i/2; n += 2){
m = i - n;
/* n + m == n + (i - n) == i */
if (odd(m) && odd(n) && is_prime(n) && is_prime(m) &&
n > 2 && m > 2){
printf("%d + %d = %i\n", m, n, i);
counter++;
}
}
if (counter == 0)
printf("%d is not composable!!!\n", i); /* Error in video: missing parameter i */
printf("\n");
}
int odd(int i){
return i % 2 == 1;
}
int even(int i){
return i % 2 == 0;
}