啊哈磊_编程从这里起步
标题:
高手看看哪的事 啊哈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 编辑
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int prime(int a);
int main()
{
int a, count;
count = 0;
for(a = 3; a < 5000000; a+=2)
if(prime(a) && prime(10000000-a))
++count;
printf("count: %d", count);
system("pause");
return 0;
}
int prime(int a)
{
int upper = (int)sqrt(a);
int i;
for(i = 2; i <= upper; ++i)
if(a % i == 0)
return 0;
return 1;
}
复制代码
算是一种可行的解法
首先质数的试除,做到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