题目分析:对于任意偶数,拆成两个不同的素数,求有几种拆法。
解题思路:函数求解,写一个判断素数的函数,在主函数中调用两次,若i和n-i都成立,结果加一。
错误原因:循环应从可拆出的最小素数3开始,而不是可拆出两个不同素数的最小数5开始,且拆出的两个素数是两个不同素数。
代码实现:
#include<stdio.h> #include<math.h> int prime(int m); int main (void) { int n,i,a; while(scanf("%d",&n),n!=0) { a=0; for(i=3;i<n/2;i++) { if(prime(i)!=0)//找出可拆出的两个素数中较小的数 { if(prime(n-i)!=0)//若n-i的值也为素数,结果加一 a++; } } printf("%d\n",a); } return 0; } int prime(int m)//判断素数 { int i,k; if(m==1) return 0; k=(int)sqrt(m); for(i=2;i<=k;i++) { if(m%i==0) return 0; } return 1; }