#7921: 本題心得


tcfsh910993 (Akito-senior)

學校 : 國立臺中第一高級中學
編號 : 14969
來源 : [114.43.212.110]
最後登入時間 :
2023-09-19 16:28:37
a007. 判斷質數 | From: [121.254.116.18] | 發表日期 : 2013-07-07 19:09

花了N天,TLE了無數次之後,終於拿到了AC

以下說一下做這題的心得:

1.在2013/6/23這題被改過之後,這題就不是個該放在a007的題目,如果你還是個寫程式的新手,這題算是很挑戰性的題目(雖然要用到的基礎知識也不會太多)。一般的迴圈方法,絕對會爆掉,這題只能先建質數表然後用表檢測。建議先試試看d709,這是一般迴圈可以解的,再來是d705,比這題鬆一些,最後才是這題。

2.如果要快速的解這題,需要對整數論有一定程度的了解,我把這題會用到的知識列舉如下:

a.m除以n可以整除而沒有餘數,則n是m的因數

b.若一個數字的因數只有1和他自己本身,則該數是質數,但特別地,1不是質數(這題不會用到,但d開頭的那兩題會)

c.如果一個數字是合數,則除了1和自己本身以外,它還會有一個不大於該數開根號的因數。

d.建質數表的方法:篩法,不看1,依序從最小的數字調查起,先調查2,2是質數,所有2的兩倍以上的數(4,6,8,10,...)就不是質數,把它"排除",接下來調查3,3沒有被"排除",所以是質數,所有3的兩倍以上的數(6,9,12,15...)就不是質數,把它"排除",調查4,發現已經被排除,跳過,接下來調查5...如此這般,至於要篩到哪個數,就請大家自己想想看,前面有提示了

篩法的效率不會很嚴重影響這題的可解性,但如果想追求最短時間,也可以想想看怎麼篩比較快 

3.重點提示:for迴圈的判斷是每做一次就會判斷一次,判斷可是要花時間的,一個糟糕的習慣是用判斷來處理所有問題,更糟糕的習慣則是在判斷裡面放算式,例如說如果我放了個for(k=1;k<<sqrt(n);k++),這個函式跑到k=10000的話,sqrt(n)就會被計算10000次

 
#8049: Re:本題心得


chenzhao (nothing)

學校 : 福建省福州第十九中学
編號 : 32689
來源 : [143.215.55.85]
最後登入時間 :
2021-09-04 02:16:24
a007. 判斷質數 | From: [218.66.67.147] | 發表日期 : 2013-08-05 22:21

花了N天,TLE了無數次之後,終於拿到了AC

以下說一下做這題的心得:

1.在2013/6/23這題被改過之後,這題就不是個該放在a007的題目,如果你還是個寫程式的新手,這題算是很挑戰性的題目(雖然要用到的基礎知識也不會太多)。一般的迴圈方法,絕對會爆掉,這題只能先建質數表然後用表檢測。建議先試試看d709,這是一般迴圈可以解的,再來是d705,比這題鬆一些,最後才是這題。

2.如果要快速的解這題,需要對整數論有一定程度的了解,我把這題會用到的知識列舉如下:

a.m除以n可以整除而沒有餘數,則n是m的因數

b.若一個數字的因數只有1和他自己本身,則該數是質數,但特別地,1不是質數(這題不會用到,但d開頭的那兩題會)

c.如果一個數字是合數,則除了1和自己本身以外,它還會有一個不大於該數開根號的因數。

d.建質數表的方法:篩法,不看1,依序從最小的數字調查起,先調查2,2是質數,所有2的兩倍以上的數(4,6,8,10,...)就不是質數,把它"排除",接下來調查3,3沒有被"排除",所以是質數,所有3的兩倍以上的數(6,9,12,15...)就不是質數,把它"排除",調查4,發現已經被排除,跳過,接下來調查5...如此這般,至於要篩到哪個數,就請大家自己想想看,前面有提示了

篩法的效率不會很嚴重影響這題的可解性,但如果想追求最短時間,也可以想想看怎麼篩比較快 

3.重點提示:for迴圈的判斷是每做一次就會判斷一次,判斷可是要花時間的,一個糟糕的習慣是用判斷來處理所有問題,更糟糕的習慣則是在判斷裡面放算式,例如說如果我放了個for(k=1;k<

更新完就不适合新手了,这就比判断质数2还具有挑战
 
#8079: Re:本題心得


kunpeng (小昆)

學校 : 福建省福州第十九中学
編號 : 33428
來源 : [183.252.16.216]
最後登入時間 :
2015-12-14 16:28:18
a007. 判斷質數 | From: [220.160.62.143] | 發表日期 : 2013-08-11 19:10

花了N天,TLE了無數次之後,終於拿到了AC

以下說一下做這題的心得:

1.在2013/6/23這題被改過之後,這題就不是個該放在a007的題目,如果你還是個寫程式的新手,這題算是很挑戰性的題目(雖然要用到的基礎知識也不會太多)。一般的迴圈方法,絕對會爆掉,這題只能先建質數表然後用表檢測。建議先試試看d709,這是一般迴圈可以解的,再來是d705,比這題鬆一些,最後才是這題。

2.如果要快速的解這題,需要對整數論有一定程度的了解,我把這題會用到的知識列舉如下:

a.m除以n可以整除而沒有餘數,則n是m的因數

b.若一個數字的因數只有1和他自己本身,則該數是質數,但特別地,1不是質數(這題不會用到,但d開頭的那兩題會)

c.如果一個數字是合數,則除了1和自己本身以外,它還會有一個不大於該數開根號的因數。

d.建質數表的方法:篩法,不看1,依序從最小的數字調查起,先調查2,2是質數,所有2的兩倍以上的數(4,6,8,10,...)就不是質數,把它"排除",接下來調查3,3沒有被"排除",所以是質數,所有3的兩倍以上的數(6,9,12,15...)就不是質數,把它"排除",調查4,發現已經被排除,跳過,接下來調查5...如此這般,至於要篩到哪個數,就請大家自己想想看,前面有提示了

篩法的效率不會很嚴重影響這題的可解性,但如果想追求最短時間,也可以想想看怎麼篩比較快 

3.重點提示:for迴圈的判斷是每做一次就會判斷一次,判斷可是要花時間的,一個糟糕的習慣是用判斷來處理所有問題,更糟糕的習慣則是在判斷裡面放算式,例如說如果我放了個for(k=1;k<

更新完就不适合新手了,这就比判断质数2还具有挑战

我觉得不是,我的程式码才22行

 
#9891: Re:本題心得


ktchan825 (kt)

學校 : 不指定學校
編號 : 47873
來源 : [119.247.141.184]
最後登入時間 :
2015-06-30 01:20:36
a007. 判斷質數 | From: [119.247.141.184] | 發表日期 : 2015-06-10 02:15

花了N天,TLE了無數次之後,終於拿到了AC

以下說一下做這題的心得:

1.在2013/6/23這題被改過之後,這題就不是個該放在a007的題目,如果你還是個寫程式的新手,這題算是很挑戰性的題目(雖然要用到的基礎知識也不會太多)。一般的迴圈方法,絕對會爆掉,這題只能先建質數表然後用表檢測。建議先試試看d709,這是一般迴圈可以解的,再來是d705,比這題鬆一些,最後才是這題。

2.如果要快速的解這題,需要對整數論有一定程度的了解,我把這題會用到的知識列舉如下:

a.m除以n可以整除而沒有餘數,則n是m的因數

b.若一個數字的因數只有1和他自己本身,則該數是質數,但特別地,1不是質數(這題不會用到,但d開頭的那兩題會)

c.如果一個數字是合數,則除了1和自己本身以外,它還會有一個不大於該數開根號的因數。

d.建質數表的方法:篩法,不看1,依序從最小的數字調查起,先調查2,2是質數,所有2的兩倍以上的數(4,6,8,10,...)就不是質數,把它"排除",接下來調查3,3沒有被"排除",所以是質數,所有3的兩倍以上的數(6,9,12,15...)就不是質數,把它"排除",調查4,發現已經被排除,跳過,接下來調查5...如此這般,至於要篩到哪個數,就請大家自己想想看,前面有提示了

篩法的效率不會很嚴重影響這題的可解性,但如果想追求最短時間,也可以想想看怎麼篩比較快 

3.重點提示:for迴圈的判斷是每做一次就會判斷一次,判斷可是要花時間的,一個糟糕的習慣是用判斷來處理所有問題,更糟糕的習慣則是在判斷裡面放算式,例如說如果我放了個for(k=1;k<

更新完就不适合新手了,这就比判断质数2还具有挑战

我觉得不是,我的程式码才22行

能分享一下嗎?


 
ZeroJudge Forum