/* integral.c */
#include <stdio.h>
#include <math.h>

main(){
  double sum = 0, delta = 0.025, x = -5;
  double y, z;
  int i, j,k;
  
 
  for(i=0; i <400; i++)
   {x += delta;
   y = -5;
   for(j=0; j<400; j++)
     {y += delta;
     z=-5;
     for(k=0;k<400;k++)
       {z += delta;
       if(x*x+y*y+z*z<25)
	 sum += exp(-x*x)*cos(y*y)*cos(z*z);}}}
  sum=sum*delta*delta*delta;
 printf("integral=%f10\n", sum);
}

/* prime.c */
#include <stdio.h>
#include <math.h>

main(){
  int i,  p, count=1;
  int x, xisprime, sqrtx;
  p = 3;
  for(x=3; count < 300000; x+=2)
    { xisprime = 1;
      sqrtx = (int) sqrt(x);
      for(i=3; i<= sqrtx; i++)
	if(x%i == 0)
	  {xisprime = 0;
	  break;};
      if(xisprime) 
	{count++;
	p=x;};
    }
  printf("the %ith prime is %i\n", count, p);
      
}



/* goldbach.c */
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define size 50000000
#define size2 5000000 /*should be greater than number of primes < 2*size+3 */

main(){
  int i,j, diff,inc,count=0;
  int limit, top,maxp = 3, maxq=3;
  char *isprime; /* treated like an integer array */
  int *primes;
  double x;
  int test;

  isprime = (char *)malloc((size_t)(size*sizeof(char)));
  limit = (int) sqrt(2*size + 3.5) ; 
  primes = (int *)malloc((size_t)(size2*sizeof(int)));

  if((isprime==NULL)|| (primes == NULL)) 
    {printf("Out of memory\n");
    exit(0);}
 
 for(i=0;i<size;i++)
   isprime[i]=1;

 for(i=0;i<limit; i++)
   {inc = 2*i+3;
   for(j=3*(i+1); j<size; j+=inc)
     isprime[j]=0;}
 
 for(i=0;(i<size)&&(count<size2);i++)
   if(isprime[i]){
     primes[count] = 2*i+3;
     count++;}

 top= 2*size;
 for(i=6; i <= top ; i+=2)
   {test = 0;
   for(j=0; primes[j]<i;j++)
     {diff = i - primes[j];
     if(isprime[(diff-3)/2])
       {/*printf("%i = %i + %i\n", i, primes[j], diff);*/
	 test = 1;
	 if(primes[j]>=maxp)
	   {maxp = primes[j];
	   maxq=diff;}
	 break;}}
   if(test == 0)
     {printf("Goldbach fails for %i\n", i);
     exit(0);
     }}

 printf("Goldbach true up to %i\n max partition: %i+%i\n", top, maxp, maxq);

}


