2016-02-05 153 views
-2

素数(或素数)是大于1的自然数,除1和自身以外没有正数除数。 我在做什么是该检查的数量是素数或不:德尔福 - 素数

begin 
writeln('give a number '); 
readln(N); S := 0; 
for I := 1 to N do 
if N mod I = 0 then 
S := S + 1 ; 

if S = 2 then 
writeln('Prime') 
else 
writeln('not prime'); 
sleep(50000); 

end. 

现在我想1和100(或任何其他数字)之间得到的所有质数使用此:

begin 
writeln('give a number '); 
readln(N); 

for I := 1 to N do begin 
     S := 0; 
for J := 1 to I do 
    begin 
if I mod J = 0 then 
S := S +1 ; if S = 2 then 
     writeln(I); 

end; 
    end; 
sleep(500000000000); 
end. 

但它并不是真正的工作。

+0

它不会复制任何东西,因为我问的第二个代码,而不是第一个。 @MartynA为什么呢?从逻辑上来说,总理只接受1和他自己的分割,这使得它成为两个数字。所以我想,它是如何工作的,现在是的..问题是在第二个代码(循环)。 – user3597342

+0

我能修复它,在第二篇文章中回答。 ty大家。 – user3597342

+3

当您要求其他人帮助您解决问题时,您应该提供一个比“这不是真正的工作”更好的问题描述。 – Michael

回答

1

我能解决这个问题:

begin 
writeln('give a number '); 
readln(N); 

    for I := 1 to N do begin 
S := 0; 
for J := 1 to I do 
begin 
if I mod J = 0 then 
     S := S +1 ; 

end; 
if S = 2 then writeln(i); 


end; sleep(50000); 
end. 
+1

你可以用Readln()替换你的睡眠呼叫;如果你想防止关闭命令提示符... – whosrdaddy

+0

我建议你阅读更多有关素数的信息。一些数学结果可以让你优化你的代码。例如,你不需要检查所有直到N的整数,因为有一个定理说一个数的素数必须小于该数的平方根。那么你必须测试刚好大于N的平方根的第一个整数,并将你的条件改为S-1,因为我永远不会达到N来计算第二个数字qho除N,即N本身。 –