用pascal语言求100以内的质数

program oo;vari,j:integer;f:boolean;beginfor i:=1 to 100 do begin f:=true; for j:=2 to trunc(sqrt(i))+1 do if i mod j=0 then begin f:=false;end; if f=true then write(i:4); end;readln;end.for j:=2 to trunc(sqrt(i))+1 do截尾函数后为什么要加1?
2026年09月22日 04:20
有5个网友回答
网友(1):

如果sqrt以后有小数(比如等于7.071...),根据原理是要判断到7.071...的,但是因为for循环是整数,只能到7,到不了那一位,写代码的人认为可能存在和理论上可能的最大质因数数值(7.071...)很接近的一个因数(即大于7小于7.071的一个数)。
然而事实上根本不会存在这么一个数,因为因数是整数的。
所以这句话没必要加1,加1属于浪费时间。

网友(2):

其实加与不加一个样子
不信你可以试验一下
但是我建议的是不加
因为很多大的程序要对数字判奇偶
上万个数字判断
如果每个数字都要多加一次判断
没用
而且还浪费时间

这是我的看法
如果有不同的
绝不否认!

网友(3):

trunc(sqrt(i))是指取i的根号后取下整,加1后可使程序输出结果更加保险,但没必要。一般来说,取到根号后就行 。

网友(4):

个人觉得不+1也是正确的,如果你有可以导致错误的数据可以告诉我,我再帮你研究下具体原因……

网友(5):

不用加1的。。