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


chienyu11026 (♂,,。劍漁﹏ ×)

學校 : 高雄市立高雄高級中學
編號 : 13370
來源 : [210.60.122.151]
最後登入時間 :
2015-04-01 11:13:09
d290. 完全数 -- me | From: [59.113.172.214] | 發表日期 : 2011-01-02 19:30

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

 

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


jason3e7 (jason3e7)

學校 : 不指定學校
編號 : 6907
來源 : [123.194.129.186]
最後登入時間 :
2018-12-29 23:03:42
d290. 完全数 -- me | From: [122.122.187.130] | 發表日期 : 2011-02-24 12:01

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

 

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

參考wiki 用公式加速

減少判斷的數字

AC 

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


hastrvretk (許博凱)

學校 : 新北市立安溪國中
編號 : 26906
來源 : [120.107.175.25]
最後登入時間 :
2019-04-23 11:35:58
d290. 完全数 -- me | From: [111.249.10.14] | 發表日期 : 2013-11-16 20:56

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

 

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

我的程式碼:

#include<stdio.h>

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

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


z3x56 (二信阿資)

學校 : 基隆市私立二信高級中學
編號 : 41061
來源 : [61.231.128.29]
最後登入時間 :
2020-08-22 18:35:15
d290. 完全数 -- me | From: [49.159.135.57] | 發表日期 : 2015-03-26 21:56

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

可以查出(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 (二信阿資)

學校 : 基隆市私立二信高級中學
編號 : 41061
來源 : [61.231.128.29]
最後登入時間 :
2020-08-22 18:35:15
d290. 完全数 -- me | From: [49.159.135.57] | 發表日期 : 2015-03-26 22:14

 

上面貼錯了

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

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


z3x56 (二信阿資)

學校 : 基隆市私立二信高級中學
編號 : 41061
來源 : [61.231.128.29]
最後登入時間 :
2020-08-22 18:35:15
d290. 完全数 -- me | From: [49.159.135.57] | 發表日期 : 2015-03-26 23:06

我跑出來了,大致如下:

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 (二信阿資)

學校 : 基隆市私立二信高級中學
編號 : 41061
來源 : [61.231.128.29]
最後登入時間 :
2020-08-22 18:35:15
d290. 完全数 -- me | From: [49.159.135.57] | 發表日期 : 2015-03-26 23:20

 

注意 long long ans[ ] 

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

 
ZeroJudge Forum