求1000以内所有恰好能分解成10组两个素数之和
要求
根据哥德巴赫猜想,任意一个大偶数都可以分解为两个素数之和。但许多偶数分解为两个素数之和并不是唯一的。
请编写函数fun,其功能是:求1000(不包括1000)以内的所有恰好能分解成10组两个素数之和(5+109和109+5被认为是同一组)的偶并依次存入数组a中并在屏幕上打印出来,打印时每个数单独一行,符合条件的个数通过函数值返回。数,
例如:114=5+109=7+107=11+103=13+101=17+97=31+83=41+73=43+71=47+67=53+61
114恰好可以分解为10组素数之和,因此114是我们要找的偶数。
而116=3+113=7+109=13+103=19+97=37+79=43+73
120=7+113=11+109=13+107=17+103=19+101=23+97=31+89=37+83=41+79=47+73=53+67=59+61
116可以分解为6组素数之和,120可以分解为12组素数之和,因此116和120都不是我们要找的偶数。函数prime用来判断一个数n是否为素数,是则返回1,否则返回0。
代码
#include<stdio.h>
#include<math.h>
#pragma warning(disable:4996)int prime(int n)
{ int k,flag=1;for (k=2; k<=(int)sqrt((double)n); k++)if (n%k == 0)flag=0;return flag;
}
int fun(int m, int a[])
{ int k, s, count, i=0;for(k=6; k<=m; k+=2){ count = 0;/* 请在此处填写代码 */for(s=2;s<k/2;s++){if(prime(s) & prime(k-s)){count++;}}if (count == 10) {printf("%d\n", k);a[i++] = k;}}return i;
}
main( )
{ int count, a[100];void NONO(int count, int a[]);count = fun(999, a);NONO(count, a);
}void NONO(int count, int a[])
{FILE *fp;int i;fp = fopen("out.dat","w") ;for(i=0; i<count; i++)fprintf(fp, "%d\n", a[i]);fclose(fp);
}