#4710: 請問這題有人真的跑出來嗎?


chienyu11026 (♂,,。劍漁﹏ ×)


有人是寫程式從8129開始,跑出來的嗎?應該會TLE吧...還是有什麼很快的算法呢?

 

#4903: Re:請問這題有人真的跑出來嗎?


jason3e7 (jason3e7)


有人是寫程式從8129開始,跑出來的嗎?應該會TLE吧...還是有什麼很快的算法呢?

 

http://en.wikipedia.org/wiki/Perfect_number

參考wiki 用公式加速

減少判斷的數字

AC 

#8380: Re:請問這題有人真的跑出來嗎?


hastrvretk (許博凱)


有人是寫程式從8129開始,跑出來的嗎?應該會TLE吧...還是有什麼很快的算法呢?

 

去google第五個完全數,然後貼上!

我的程式碼:

#include<stdio.h>

int main(){
     printf("33550336");
     return 0;   
}

#9740: Re:請問這題有人真的跑出來嗎?


z3x56 (二信阿資)


應該練習以維基提供的公式寫出程式,而不是直接貼答案

可以查出(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(質數?)

 

 

#9741: Re:請問這題有人真的跑出來嗎?


z3x56 (二信阿資)


 

上面貼錯了

第6個是 (2^16)*((2^17)-1)、第7個才是 (2^18)*((2^19)-1)

#9744: Re:請問這題有人真的跑出來嗎?


z3x56 (二信阿資)


我跑出來了,大致如下:

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 

 

#9745: Re:請問這題有人真的跑出來嗎?


z3x56 (二信阿資)


 

注意 long long ans[ ] 

前8個可以用 long long ,但後面的就要大數了