Each number can be shown as the sum of prime numbers.
I used several tables and a primitive algorithm.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 1000
#define TEST 10
void Sort(int *table, int size)
{
int i,j,tmp;
for(i=1;i<size;i++)
{
j=i;
tmp=table[j];
while((j>0) && (table[j-1]>tmp))
{
table[j]=table[j-1];
j--;
}
table[j]=tmp;
}
}
int is_First(int value)
{
int i,sum;
sum=0;
for(i=1;i<value+1;i++)
if(value%i==0)
++sum;
if(sum==2)
return 1;
else
return 0;
}
int *table;
int *test_table;
int **result_table;
void init_Table()
{
int i,j;
result_table= (int**)malloc(TEST*sizeof(int*));
for(i=0;i<TEST;i++)
result_table[i]=(int*)malloc(TEST*sizeof(int));
test_table=(int*)malloc((TEST+1)*sizeof(int));
table=(int*)malloc((MAX+1)*sizeof(int));
i=0;
j=2;
do
{
if(is_First(j))
{
table[i]=j;
++i;
}
++j;
}while(i<MAX);
for(i=0;i<TEST;i++)
test_table[i]=TEST*50+rand()%TEST*5;
}
void free_Table()
{
int i;
free(table);
free(test_table);
for(i=0;i<TEST;i++)
free(result_table[i]);
free(result_table);
}
int main()
{
int i,j,k,sum;
srand(time(NULL));
init_Table();
i=0;
do
{
do
{
sum=0;
for(j=0;j<TEST;j++)
{
k=rand()%TEST*5;
result_table[i][j]=table[k];
sum+=table[k];
}
}while(test_table[i]!=sum);
++i;
}while(i<TEST);
for(i=0;i<TEST;i++)
{
Sort(result_table[i],TEST);
}
for(i=0;i<TEST;i++)
{
printf("%d = \n",test_table[i]);
for(j=0;j<TEST;j++)
{
printf("%d, ",result_table[i][j]);
}
printf("\n");
}
free_Table();
getch();
return 0;
}
Brak komentarzy:
Prześlij komentarz