hdoj-2098-分拆素数和(解题报告)

    xiaoxiao2021-04-14  60

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

    问题描述:

    分拆素数和

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 38752    Accepted Submission(s): 16942

    Problem Description

    把一个偶数拆成两个不同素数的和,有几种拆法呢?

    Input

    输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。

    Output

    对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。

    Sample Input

    30 26 0

    Sample Output

    3 2  

    题目分析:对于任意偶数,拆成两个不同的素数,求有几种拆法。

    解题思路:函数求解,写一个判断素数的函数,在主函数中调用两次,若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; }

    转载请注明原文地址: https://ju.6miu.com/read-670706.html

    最新回复(0)