9
我知道通常的方法迭代找到n-1階乘,然後檢查。但是這具有O(n)的複雜性,並且需要太多的時間來處理大n。有其他選擇嗎?是否有快速查找if(n-1)的方法!可以被n整除?
我知道通常的方法迭代找到n-1階乘,然後檢查。但是這具有O(n)的複雜性,並且需要太多的時間來處理大n。有其他選擇嗎?是否有快速查找if(n-1)的方法!可以被n整除?
是的,如果n
是素數,顯然(n-1)!
不能被n
整除。
如果n
不是素數可寫成n = a * b
與a != b
然後(n-1)!
是n
整除,因爲它包含a
和b
。
如果n = 4
,(n-1)!
是不是整除n
,但如果n = a * a
與a
是一個素數> 2,(n-1)!
是整除n
因爲我們發現(n-1)!
a
和2a
(感謝Juhana在評論)。
找到它n是素數,我不需要迭代1到n嗎? – batman
@learner nope,只能從2到'floor(sqrt(n))'。 – 2012-10-21 11:18:37
一個天真的方法是測試1和'sqrt(n)'(而不是'n')之間的數字,看它們是否是n的除數,但這是另一個問題(http://stackoverflow.com/questions/2586596 /最快的算法換素性檢驗)。 – alestanis