题目:http://acm.gdufe.edu.cn/Problem/read/id/1004
再来一个数学题--分拆素数和
Time Limit: 2000/1000ms (Java/Others)
Problem Description:
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input:
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output:
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input:
20 36 0
Sample Output:
2 4
思路:由2开始一个个数的试,如果到根号a都没有能都整除a的数字,那么a就是素数
难度:比较简单吧,书上有思路,有例题。
代码:
1 #include<stdio.h> 2 #include<math.h> 3 int main() 4 { 5 int a; 6 while(scanf("%d",&a)!=EOF) 7 { 8 int ch(int); 9 int flag,i,j; 10 int b=0; 11 if(a==0) 12 break; 13 else 14 { 15 for(i=2,j=a-2;i<a/2;i++,j--) 16 { 17 flag=ch(i); 18 if(flag==0) 19 { 20 flag=ch(j); 21 if(flag==0) 22 b=b+1; 23 } 24 } 25 printf("%d ",b); 26 } 27 } 28 return 0; 29 } 30 31 int ch(int a) 32 { 33 int flag=0; 34 int j; 35 for(j=2;j<=sqrt(a);j++) 36 { 37 if(a%j==0) 38 { 39 flag=1;break; 40 } 41 } 42 return flag; 43 }