關於for迴圈問題 |
尚未結案
|
nick6562
一般會員 發表:26 回覆:19 積分:9 註冊:2004-07-15 發送簡訊給我 |
各位高手,小弟是初學者,算數也不大好,看書後仍不了解,請給予指教...
var
n,i,j : integer;
s : string;
flag : boolean;
begin
n := StrToInt(Edit1.Text);
s := '';
for i := 2 to n-1 do
begin
flag := true;
for j := 2 to i-1 do
if (i mod j) =0 then
begin
flag := false;
break;
end;
if flag = true then
s := s+IntToStr(i)+'';
end;
Label1.Caption :=s;
end; 書上寫明Edit1.Text的值為50,為什麼算出來的值為2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 ??感謝各位,不好意思...
|
shpeng
初階會員 發表:6 回覆:67 積分:49 註冊:2002-12-21 發送簡訊給我 |
|
nick6562
一般會員 發表:26 回覆:19 積分:9 註冊:2004-07-15 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
引言:nick6562您好: 你的问题的关键是判断一个数是否是质数。因为任何一个自然数都不可能被比它大的自然数整除,所以要判断一个自然数是否为质数,只要看它能否被比它小的自然数(当然除1之外)整除,若只要存在能被一个自然数整除则就不是质数,否则是质数方法1:您上面的程式就是这样进行判断的。另一方面,若一个自然数n不是质数,则必然能表示成两个自然数n1和n2之积,并且其中之一必然小于等于sqrt(n),另一个必然大于等于qrt(n)。所以要判断一个自然数n是否为素数,可简化为判断它能否被2至sqrt(n)之间的自然数整除即可方法2:可参考我改的那句引言: 這是利用雙迴圈求質數的範例 再想想有沒有更好的方法? ==取之於斯,用之於斯==我不了解你的意思耶~~~? 什麼更好的方法? procedure TForm1.Button2Click(Sender: TObject); var n,i,j : integer; s : string; flag : boolean; begin n := StrToInt(Edit1.Text); s := ''; for i := 2 to n do // 取2到所输入的数字(n)进行逐一的判断,是否为质数,因1不是质数,2为最小质数 begin flag := true; for j := 2 to i-1 do //判断是否能被2至小于该数的整数整除,能的话不是质数,不能的话是质数 是第一种判断方法 //可改为:for j := 2 to trunc(sqrt(n)) do 也就是第二种判断方法,可以少判断几次,相对上面语句,可能会快点 [red] if (i mod j) =0 then //能整除,不是质数,判断下一个数 begin flag := false; break; //中断,判断下一个数 end; if flag = true then //不能整除是质数,累记所有质数 s := s IntToStr(i) ' '; end; Label1.Caption :=s; //输出所有介于2至所输入的数字(n)之间的质数,所以您会看到Label1的一系列数字 end;希望对您有所帮助 说多一句,如果要 > ——行径窄处,留一步与人行—— —— |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |