應該練習以維基提供的公式寫出程式,而不是直接貼答案
可以查出(k)是質數且((2^k)-1)也是質數就可以找到前六個完全數了
第1個:6(1位) = (2^1 )*((2^2 )-1) = 2 * 3
第2個:28(2位) = (2^2 )*((2^3 )-1) = 4 * 7
第3個:496(3位) = (2^4 )*((2^5 )-1) = 16 * 31
第4個:8128(4位) = (2^6 )*((2^7 )-1) = 64 * 127
??? = (2^10)*((2^11)-1)=1024*2047(因2047非質數)
第5個:33550336(8位) = (2^12)*((2^13)-1) = 4096 * 8191
(2^17)-1 = 131071 是不是質數?
第6個:**********(10位)= (2^18)*((2^19)-1) = ????? * 524287(質數?)
我跑出來了,大致如下:
1、用篩法建 s[1]~s[600000] >2且2的倍數不判斷,true是質數
2、由以上的 s再產生vector<int> p 質數共有 49098 個 ,最大為 599999
3、一個 bool isp( n ) { for(i=0; i<=sqrt(n) ; ++i) 判斷 n%p[i]==0 ,則可判斷2^31-1之內的質數
4、我計數前8個符合 k是質數 and 2^k-1也是質數的話 存入 ans[cnt++] = (2^(k-1))*(2^k-1)
AC:4ms、1.1MB