2016-02-05 64 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本身。 –