pascal 問題

2007-05-18 7:36 am
有冇人識寫一個pascal program 係搵
2至10000裏面ge prime number ga??
用array ga
好似咁
2 3 5 7 11
13 17 19 23 27
...

回答 (2)

2007-05-19 1:10 am
✔ 最佳答案
方法一: 這是比較常用的方法, 其實可以不用Array, 但你指明要用, 所以先將答案放到Array A中, 最後再印出來, 裡面的i是2--10000的數, 每次求i是否質數, 而j則由2--i開方去試, 看看能否除得盡i, 如果其中一次可以除得盡i, 則i不是質數, 以break指令中止j循環, 因為再試都沒意思。最後如果is_prime沒有變成false, 即是從沒有數可以除得盡i, 那麼i就是質數, 把它記入Array中, t表示目前找到多少個質數。其實既然用array做, 其實可以進一步優化的, 但太難說明, 而且莫說一般中學生, 就算係一般大學生都唔會要求咁做, 所以就唔講了。


圖片參考:http://i7.tinypic.com/4lshv9u.jpg

方法二: 這叫篩選法, 是一定要用array的方法, 亦是最快速度的求質數的方法之一, 方法是把10000之內的數都做個記號, 表示該數是否則數, 例如2是質數,則將2的所有倍數都設為false, 即不是質數, 然後找到3仍是質數, 又把3的所有倍數都定為false, 再之後4已經是false, 不是質數, 之後是5, 5是true, 所以是質數, 又把5的所有倍數都設成false, 如此類推, 直到10000的開方為止, 則Array的第1---10000格裡, 只要是true的就是質數, 是false的就不是質數。

圖片參考:http://i5.tinypic.com/638mkcj.jpg

由於直接貼程式上來, 有d字會變成怪符號, 所以貼圖。

2007-05-22 12:02:50 補充:
上面位網友的答案, 根本就解答唔到發問者的問題, 佢只係一個分別用Function和procedure求質數的例子, 但睇黎呢位發問者都係打完斎唔要和尚果種人, 完全唔處理, 之後交投票, 投票都係我蝕, 所以我覺得問程式功課d人係最.....的。以後都係少答為妙, 或者隨便在網上複制算數,無謂浪費時間去寫程式, 好心冇好報!

2007-05-22 12:04:46 補充:
講真, 投票有幾多個係Pascal的行家....。
參考: 多年程式設計經驗
2007-05-30 4:06 am
the first algorithm can be rewritten a bit using SET (quite unique in PASCAL and seldom written by programmer).

for j:= 2 to trunc(sqrt(i)) do
if j in primeset then
if i mod j = 0 then
...
else
primeset := primeset + [i];
....
end;


收錄日期: 2021-04-12 21:13:46
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20070517000051KK05181

檢視 Wayback Machine 備份