一道非常简单的题,重点在于检查一个数是否为奇数且质数。检查质数的时候我用打表的方式直接检查,用素数筛法进行打表,开始写的素数筛法效率很低,后来参考了下其他人的优化。我有一点难理解的是,这种从2倍开始,对于当前找到的所有素数,乘以倍数得到的数,将他们筛掉的方法为什么能够确保筛掉所有素数,并且最后控制被筛掉的数只被筛一次的条件也有些难以理解。记录在此,供今后研究。
#include#define MAX_LIMT 1000000int chk_odd(int);void make_prime(void);int prime[MAX_LIMT],recrd[MAX_LIMT];int main(){ int n; make_prime(); while(scanf("%d",&n)!=EOF&&n!=0) { int a=2,k=1; while(a MAX_LIMT) break; if(chk_odd(n-a)&&prime[a]&&prime[n-a]) { printf("%d = %d + %d\n",n,a,n-a); break; } k++; } } return 0;}int chk_odd(int x){ if(x%2) return 1; else return 0;}void make_prime(void ){ int i,j,cnt=0; for(i=0;i