关于素数的问题,帮帮忙

来源:百度知道 编辑:UC知道 时间:2024/05/23 11:01:31
例5_8、求100-200之间的所有素数。
分析:我们可对100-200之间的每一整数进行判断,判断它是否为素数,是则输出。而对于任意整数i,根据素数定义,我们从2开始到找到i的第一个约数。若找到第一个约数,则i必然不是素数。否则i为素数。
var i,x : integer;

begin
for i:=101 to 200 do
begin
x:=2;
while (x<=trunc(sqrt(i))) and (i mod x<>0) do
begin

x:=x+1;
if x>trunc(sqrt(i)) then write(i:6)

end;
end; writeln
end.

这个PASCAL的程序中,while (x<=trunc(sqrt(i))) ,我是指为什么要这样,有什么作用,请说名下.懂的大侠把QQ也留下哈.

数学上已经证明, 如果一个整数N, 设它的开方 R=根号N
如果从1到R都没有一个整数可以整除N, 那N就是一个质数.

while (x<=trunc(sqrt(i))) 不就是, 当X小于根号I的整数部分的意思啦~~
验证一个数N是不是质数, 并不需要从1验证到N, 只需要从1验证到它的根号就行了.

sqrt是 开方啊 呵呵 虽然我不懂pascal 但是还懂点 c++
然后 trunc是强制类型转换把

素数是只能被1和他本身所整除的数
因此 要用从一开始一直除下去看看是不是只能被1和他本身整除
这样就要除n个数
为了减小开销 我们只需要除从1到sqrt(n)就可以
我们不需要把 3*2 和2*3都验证来证明6不是素数 对把
呵呵 祝你好运

QQ 66296211 我不是大峡哈

楼上说的也没办法呀。这是一个数学问题。楼主要是真感兴趣就看看钱能的书吧。他说了有很多方法,数学上的不说,其他性能上的问题讲了不少。求的是1到1亿内的素数。去图书馆看看或下载个电子版的吧。在第200页左右,讲动态内存的那一章。2005版的。

楼上几位,sqrt是平方根!!!!拜托.
用sqrt是因为大于sqrt(a)是它的因数的数都与之前的因数重合了,trunc是截尾函数(省略小数),这样就可以减少循环次数了^_^
还有,楼主可以用for语句,那样更加简洁.