花了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次
花了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<
花了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<
我觉得不是,我的程式码才22行
花了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<
我觉得不是,我的程式码才22行