搜索
查看: 1866|回复: 5
打印 上一主题 下一主题

高手看看哪的事 啊哈C不能通过

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-28 20:56:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <stdio.h>
pp(int b)
{
   int i ;  
  int sq;  
   sq=( int )(b/2);
   for ( i = 2 ; i <= sq ; i++ )   {
    if (b % i == 0 )   
      {   break ;   }  
     }   if ( i <= sq )   return 0;   
   else   return 1 ;   
  
}
int main()
{long x,y;
int z=0;
for(x=2 ; x<10000000/2 ; x++)
for(y=10000000/2;y<10000000;y++)
if (pp(x)==1 && PP(y)==1 && x+y==10000000)
z++;

    printf("%d\n",z);
        sleep(5000);
        return 0;
}
沙发
发表于 2013-2-28 21:29:19 | 只看该作者
if (pp(x)==1 && PP(y)==1 && x+y==10000000)

会报错的是这一句
C语言区分大小写,pp不能写成PP

另外这样做效率太低了
板凳
发表于 2013-2-28 21:51:21 | 只看该作者
本帖最后由 rosynirvana 于 2013-2-28 21:52 编辑
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>

  4. int prime(int a);

  5. int main()
  6. {
  7.     int a, count;
  8.     count = 0;
  9.    
  10.     for(a = 3; a < 5000000; a+=2)
  11.         if(prime(a) && prime(10000000-a))
  12.             ++count;
  13.         
  14.     printf("count: %d", count);
  15.     system("pause");
  16.     return 0;
  17. }

  18. int prime(int a)
  19. {
  20.     int upper = (int)sqrt(a);
  21.     int i;
  22.     for(i = 2; i <= upper; ++i)
  23.         if(a % i == 0)
  24.             return 0;

  25.     return 1;
  26. }
复制代码
算是一种可行的解法
首先质数的试除,做到sqrt(a)就可以了,证明也很简单,可以尝试着做一做
另外嵌套循环的开销是很大的,所以检验a和10000000-a,只用一层循环
最后,10000000拆分成两个数字之和,两个偶数显然都不合质数的要求,只检验两个奇数的情况就足够了
地板
 楼主| 发表于 2013-2-28 22:07:13 | 只看该作者
多谢  又学了一招
5#
发表于 2013-3-1 10:20:54 | 只看该作者
学习下   {:soso_e112:}
6#
发表于 2013-3-28 23:31:48 | 只看该作者
过来学习了~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表