分拆素数和

此博客链接:https://www.cnblogs.com/ping2yingshi/p/12384918.html

分拆素数和(28min)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2098

Problem Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?
 
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
 
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
 
Sample Input
30
26
0
 
Sample Output
3
2
题解:
       方法:判断素数
       思路:对于给定的数,分拆两个数后,分别对这两个数判断是不是素数,同时是素数时,个数才加一。
       注意:在素数判断函数中,循环从2到判断的数开根号这里,注意要小于等于开根号的数。
       耗时原因:一开始没有看到时分成两个数,还以为好多数,这把我难的。
代码如下:  
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
int   IsPrim(int x)
{
    int i;
    int flag = 1;
    for (i = 2; i <= sqrt(x); i++)
    {
        if (x % i == 0)//判断是不是素数
            flag = 0;
    }
    return flag;
}
int main()
{
    int n;
    while (~scanf_s("%d",&n))
    { 
        if (n == 0)
            break;
        int a;
        int b;
        int count=0;//计算满足条件数量
        for (a = 2; a < n / 2; a++)
        {
            b = n - a;
            if (IsPrim(a) && IsPrim(b))
            {
               count++;
        
            }
               
        }
        
        printf("%d
", count);
     
    }
    return 0;
}