#7921: 本題心得


tcfsh910993 (Akito-senior)


花了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)


花了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 (小昆)


花了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)


花了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行

能分享一下嗎?