24小时热门版块排行榜    

CyRhmU.jpeg
南方科技大学公共卫生及应急管理学院2026级博士研究生招生报考通知(长期有效)
查看: 1519  |  回复: 12
本帖产生 3 个 程序强帖 ,点击这里进行查看

holmescn

金虫 (正式写手)

[交流] Euler 工程 第三十题已有5人参与

又是一个指数的题啦!

说有3个数可以写成各位数字的4次方的和:

1634 = 1^4 + 6^4 + 3^4 + 4^4
8208 = 8^4 + 2^4 + 0^4 + 8^4
9474 = 9^4 + 4^4 + 7^4 + 4^4

虽然 1 = 1^4, 但这不是一个求和, 所以这个不算.

这三个数的和为: 1634 + 8208 + 9474 = 19316

那么那些数可以写成各位数字的5次方的和呢? 这些数的和又是多少?
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

★ ★ ★
余泽成(金币+3, 程序强帖+1): 鼓励交流! 2011-06-18 15:52:24
Python
CODE:
# coding: utf-8

r = 0
n = 9**5 * 5

for i in xrange(2, n):
    s = sum([int(x)**5 for x in str(i)])
    if i == s:
        r += i
        print i
print "sum =", r

结果:
引用回帖:
4150
4151
54748
92727
93084
194979
sum = 443839

[ Last edited by holmescn on 2011-6-18 at 14:02 ]
2楼2011-06-18 14:00:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+3, 程序强帖+1): 鼓励交流! 2011-06-18 15:52:37
这个不是水仙花数嘛~
传说中的恐怖O(10^n)问题。位数大一些就要筛数了。
咋一看,两边的解空间是一样的,大约都是9*10^(n-1),但是左边的解空间是紧凑的,右边的则是松散的,而且,右边的解空间映射到左边的范围不是很大,筛数从右边开始,这样就需要给出一个函数的上下限,比如要求出最接近100和1000的a^3+b^3+c^3。对于这样的线性规划问题可以在10*10*n的时间内找到最优解,然后调用欧拉24题给出的那种以字典序计数的排列函数来求解,应该效率会不错。

[ Last edited by huycwork on 2011-6-18 at 15:29 ]
漩涡的中心有一块空地,空空的。
3楼2011-06-18 15:22:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
xzhdty(金币+2): 鼓励交流! 2011-06-18 22:06:27
我也是py
CODE:
from mytictoc import tic,toc

tic()

# find upper bound
n = 1
while n*(9**5)>10**(n+1)-1:
    n += 1

# compute
print reduce(lambda x,y:x+y,[n for n in xrange(2,n*(9**5)) if n==reduce(lambda x,y:x+y,[int(c)**5 for c in str(n)])])

toc()

效率低下
CODE:
443839
Elapsed time: 5.64833575 seconds

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
4楼2011-06-18 16:31:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)


dubo(金币+1): 欢迎常来程序语言版讨论 2011-06-19 15:30:25
引用回帖:
Originally posted by libralibra at 2011-06-18 16:31:38:
我也是py
[code] from mytictoc import tic,toc

tic()

# find upper bound
n = 1
while n*(9**5)>10**(n+1)-1:
    n += 1

# compute
print reduce(lambda x,y:x+y,[n for n in xrange(2,n*(9** ...

libralibra兄, reduce 比sum 要快吗?
5楼2011-06-18 18:00:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
dubo(金币+1): 欢迎常来程序语言版讨论 2011-06-19 15:30:34
微尘、梦想(程序强帖+1): 2011-06-19 17:23:58
引用回帖:
Originally posted by holmescn at 2011-06-18 18:00:12:
libralibra兄, reduce 比sum 要快吗?

不会吧,我觉得sum应该快吧.我检测结果也是,还只测试了10^3-10^7的数,要是规模大,估计lambda表达式更慢.
感觉reduce,map,zip,lambda..就是为了写出来好看,少写几行代码的.

另,matlab我也发现这个问题,第28题螺旋矩阵四角求和那个,后面六十几还是八十几有个类似的,找到4个数等差数列的通项,用sum(start:step:end),并没有这样快: start+(start+step)+(start+2*step)+(start+3*step)
CODE:
================================
REDUCE+LAMBDA: 1000
499500
Elapsed time: 0.00649915 seconds

SUM: 1000
499500
Elapsed time: 0.00453717 seconds

================================
REDUCE+LAMBDA: 10000
49995000
Elapsed time: 0.00579124 seconds

SUM: 10000
49995000
Elapsed time: 0.00484922 seconds

================================
REDUCE+LAMBDA: 100000
4999950000
Elapsed time: 0.03130733 seconds

SUM: 100000
4999950000
Elapsed time: 0.00988506 seconds

================================
REDUCE+LAMBDA: 1000000
499999500000
Elapsed time: 0.34010105 seconds

SUM: 1000000
499999500000
Elapsed time: 0.13641119 seconds

================================
REDUCE+LAMBDA: 10000000
49999995000000
Elapsed time: 3.26226713 seconds

SUM: 10000000
49999995000000
Elapsed time: 1.39761869 seconds

代码
CODE:
from mytictoc import tic,toc


for i in xrange(3,8):
    print '================================'
    print 'REDUCE+LAMBDA: %d' % (10**i)
    tic()
    print reduce(lambda x,y:x+y,xrange(10**i))
    toc()

    print 'SUM: %d' % (10**i)
    tic()
    print sum(xrange(10**i))
    toc()

[ Last edited by libralibra on 2011-6-18 at 22:00 ]
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
6楼2011-06-18 21:55:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)


dubo(金币+1): 欢迎常来程序语言版讨论 2011-06-19 15:30:40
喔,那这最后就可以这么写了:
CODE:
print sum([n for n in xrange(2, n) if n == sum([int(c)**5 for c in str(n)])])

是吧,

» 本帖已获得的红花(最新10朵)

7楼2011-06-18 22:51:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

qinghuoly

木虫 (正式写手)

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
dubo(金币+1): 欢迎常来程序语言版讨论 2011-06-19 15:30:47
微尘、梦想(金币+2): 请使用BBcode代码,详见维基百科BBcode 2011-06-19 17:25:25
上我代码,scheme语言

[define [ans30]
  [define N 1e7]
  [define [d x]
    [apply +
           [map [lambda [n] [expt n 5]]
                [map string->number
                     [map string
                          [string->list [number->string x]]]]]]]
  [define [fun n l flag]
    [if [> n [add1 N]]
        [if flag
            [cons [- n 1] l]
            l]
        [fun [add1 n]
             [if flag
                 [cons [- n 1] l]
                 l]
             [= n [d n]]]]]
  
  [apply + [fun 2 '[] #f]]]
;end of code
               
;答案:443839

;符合的数为:(194979 93084 92727 54748 4151 4150)

;N取值为1e7时cpu time: 76078 real time: 77312 gc time: 10089
;N取值为1e6时cpu time: 7453 real time: 7672 gc time: 638

[ Last edited by qinghuoly on 2011-6-19 at 12:14 ]
天地为帐,日月为灯,风雷为号角,云虹为旗令,山川为阵图,草木为兵卒。运阴阳五行为谋,策古今兴替为略。
8楼2011-06-19 12:11:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)

引用回帖:
Originally posted by qinghuoly at 2011-06-19 12:11:32:
上我代码,scheme语言

[define [ans30]
  [define N 1e7]
  [define [d x]
    [apply +
           [map [lambda [n] [expt n 5]]
                [map string->number
                     [ma ...

原来 scheme用的是方括号啊, 真是不习惯啊! 还是Lisp的圆括号好看,哈哈
9楼2011-06-19 17:02:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

whiterye

新虫 (初入文坛)


小木虫(金币+0.5):给个红包,谢谢回帖
引用回帖:
Originally posted by holmescn at 2011-06-19 17:02:07:
原来 scheme用的是方括号啊, 真是不习惯啊! 还是Lisp的圆括号好看,哈哈

用Scheme 语言的人好少哦!
10楼2011-06-19 22:43:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 holmescn 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见