啊哈磊_编程从这里起步

标题: 高手看看哪的事 啊哈C不能通过 [打印本页]

作者: PC519W8    时间: 2013-2-28 20:56
标题: 高手看看哪的事 啊哈C不能通过
#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;
}
作者: rosynirvana    时间: 2013-2-28 21:29
if (pp(x)==1 && PP(y)==1 && x+y==10000000)

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

另外这样做效率太低了
作者: rosynirvana    时间: 2013-2-28 21:51
本帖最后由 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拆分成两个数字之和,两个偶数显然都不合质数的要求,只检验两个奇数的情况就足够了
作者: PC519W8    时间: 2013-2-28 22:07
多谢  又学了一招
作者: c习生    时间: 2013-3-1 10:20
学习下   {:soso_e112:}
作者: pvscpvd8    时间: 2013-3-28 23:31
过来学习了~~




欢迎光临 啊哈磊_编程从这里起步 (https://bbs.codeaha.com/) Powered by Discuz! X3.2