全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1174
推到 Plurk!
推到 Facebook!

關於for迴圈問題

尚未結案
nick6562
一般會員


發表:26
回覆:19
積分:9
註冊:2004-07-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-22 13:49:36 IP:61.222.xxx.xxx 未訂閱
各位高手,小弟是初學者,算數也不大好,看書後仍不了解,請給予指教... 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-22 14:19:07 IP:220.130.xxx.xxx 未訂閱
這是利用雙迴圈求質數的範例 再想想有沒有更好的方法? ==取之於斯,用之於斯==
------
==取之於斯,用之於斯==
nick6562
一般會員


發表:26
回覆:19
積分:9
註冊:2004-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-22 15:29:31 IP:61.222.xxx.xxx 未訂閱
引言: 這是利用雙迴圈求質數的範例 再想想有沒有更好的方法? ==取之於斯,用之於斯==
我不了解你的意思耶~~~? 什麼更好的方法?
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-23 10:25:58 IP:218.15.xxx.xxx 未訂閱
引言:
引言: 這是利用雙迴圈求質數的範例 再想想有沒有更好的方法? ==取之於斯,用之於斯==
我不了解你的意思耶~~~? 什麼更好的方法?
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;
希望对您有所帮助 说多一句,如果要 > ——行径窄处,留一步与人行—— ——
系統時間:2024-05-18 16:14:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!