24小时热门版块排行榜    

查看: 1577  |  回复: 12
本帖产生 3 个 程序强帖 ,点击这里进行查看
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

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的回帖

智能机器人

Robot (super robot)

我们都爱小木虫

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):给个红包,谢谢回帖
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 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见