# Can I improve my code?

• 07-27-2008
Can I improve my code?
Hi

I used a "sieve of eratosthenes". Just wondering if there was anything that I could do better.

Thanks!

Code:

```#include <stdio.h> int MAXINPUT=10000; int primes[10000]; void set_up_table_of_primes(); int main() {     extern int MAXINPUT;     extern int primes[10000];          int numeven;     printf("Type in your even number between 4 and 10000 inclusive:\n");     scanf("%d", &numeven);        set_up_table_of_primes();     int howmany = 0;     int i = 0;     if (numeven==4) {howmany++;} //If 4 was entered, howmany++     for (i=3; i<=numeven/2; i+=2) //Use odd primes to find answer     {          if ((primes[i]==1)&&(primes[numeven-i]==1))         {         //If two numbers add to make numeven *i+(n-i)=n* and are prime             howmany++;             printf("howmany = %d\n", howmany);         }     }     printf("%d can be expressed as the sum of primes in %d ways\n",numeven, howmany);     printf("finish\n");     return 0; } void set_up_table_of_primes() { //Sieve of Eratosthenes     extern int MAXINPUT;     extern int primes[10000];     int i, p, j;     for (i=0; i<MAXINPUT; i++)     {     //everything provisionally prime         primes[i] = 1;     }     printf("primes[15] = %d", primes[15]);     primes[0] = primes[1] = 0; //0 and 1 are not prime     p = 2;     int flag=0;     while (flag==0)     {     //Here we use a sieve of Eratosthenes to make all non-primes zeroed and leave primes as 1         while (primes[p] == 0) {p++;} //find next prime               if (p*p > MAXINPUT)         {         //Return to main function when done             return;         }         for (j=2*p; j<10000; j=j+p)         {         //multiples of p are not prime either             primes[j] = 0;         }         if(primes[p]==1) {p++;} //Move onto next prime number     } }```
• 07-27-2008
Salem
It's probably the best approach for the small primes you're generating.

Google for "prime number algorithms" for other approaches.