题目描述

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

输入

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

输出

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

样例输入

30
26
0

样例输出

3
2


 1 #include<stdio.h>
 2 #include<math.h>
 3 
 4 int isPrime(int a)
 5 {
 6     int i;
 7     int flag=1;
 8     //时间超限70%
 9     // for(i=2;i<a;i++){
10     //     if(a%i==0)
11     //         flag=0;
12     // }
13     
14     for(i=2;i<=sqrt(a);i++){
15         if(a%i==0)
16             flag=0;
17     }
18     return flag;            //flag=1:是素数,flag=0:不是素数
19 }
20 
21 int main(){
22     int n;
23     while(scanf("%d",&n)){
24         if(n==0)
25             break;
26         int count=0;
27         int a,b;        //n被拆分成的两个数
28         for(int a=2;a<n/2;a++){
29             b=n-a;
30             if(isPrime(a)&&isPrime(b)){
31                 count++;
32             }
33         }
34         printf("%d\n",count);
35     }
36     return 0;
37 }

solution:

1 求素数的方法们:

  法一:时间复杂度:o(n)

      时间容易超限

      for(i=2;i<a;i++){
        if(a%i==0)
        flag=0;
        }
  法二:时间复杂度O(n*sqrt(n))
       如果一个数不是素数,则必定为非1和其本身两个数的乘积,其中:较小数<=sqrt(a);较大数>=sqrt(a),且只需要枚举较小的范围
     注意:取等~(3*3的情况)
      

    for(i=2;i<=sqrt(a);i++){
      if(a%i==0)
      flag=0;
      }

原文地址:http://www.cnblogs.com/luoxiaoluo/p/16870887.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性