作者bookticket ()
看板C_and_CPP
标题[语法] 寻找2~1000的质数 的语法讨论
时间Mon Sep 14 20:59:36 2009
我在写这个程式时
尝试使用两层回圈 搭配高一数学学到的质数判别定理 来写
(写出来的结果可参考下面)
虽然跑出来的还算顺利
但总觉得code有点绕
(不知道是因为我是新手 还不习惯 还是真的我写的不好|||)
想请教板上的版友 不知是否可以讨论指教 提供更好或更直观的写法呢
感谢
===============================================================================
//底下是我写的程式码
int x;
int i;
for(x=2,i=2;x<=1000;x=x+1)
{
for (i=2;i<=sqrt(x);i=i+1)
//如果i比sqrt(x)大就跳出,或者如果x除
//以i为整除也跳出
{
if ((i>sqrt(x))||(x%i==0))
break;
}
{
if(i>sqrt(x))
//此时i比sqrt(x)大的都是质数,故印出
//这些属於质数的x
printf("%d\t",x);
}
}
1F:→ suhorng:首先 可以把 sqrt 移到外面,避免每次回圈就呼叫两次 sqrt 09/14 21:09
2F:→ suhorng:函式重算。再来 sqrt 的传回值是 double 吧,那麽 i 也会 09/14 21:09
3F:→ suhorng:转换成 double 去跟它比较。小心浮点数误差。最後你其实可 09/14 21:10
4F:→ suhorng:以不用判断 if (i>sqrt( (double) x) ) break; 如果你将 09/14 21:11
5F:→ suhorng:sqrt 转(四舍五入)成int的话,因为这样它自然会在 i > 09/14 21:12
6F:→ suhorng:sqrt(x) 时跳出回圈,就不用 break 了。 09/14 21:12
阿 感谢 XD
我懂了 感谢
※ 编辑: bookticket 来自: 140.119.143.103 (09/14 21:28)