WEB开发网
开发学院软件开发Python 也玩有道难题的双立方数问题:Python 版解法 阅读

也玩有道难题的双立方数问题:Python 版解法

 2010-09-22 11:24:59 来源:WEB开发网   
核心提示:发现大家都在玩这个,用 python 写了一个,也玩有道难题的双立方数问题:Python 版解法,计算一百万之内的数字还是飞快的(包括结果打印),#coding:utf-8"""第二道算法题(500分)题目要求:双倍超立方数是指一个正整数可以正好被拆分为两种不同的a^3+b^3的方式,其中

发现大家都在玩这个,用 python 写了一个,计算一百万之内的数字还是飞快的(包括结果打印)。

#coding: utf-8

"""

第二道算法题(500分)

题目要求:双倍超立方数是指一个正整数可以正好被拆分为两种不同的a^3+b^3的方式,

其中a,b均为整数且0<a<=b。对于任何一个指定的 int n, 返回所有的小于等于n的双倍超立方数的个数。

"""

def find_double_cublic_number(max):
    cubs = [pow(i,3) for i in range(1, int(round(pow(max, 1./3))))]
    #print cubs
    sum_dict = {}
    result_list = []
    length = len(cubs)
    for i in range(length):
        for j in range(i + 1, length):
            sum = cubs[i] + cubs[j]
            if sum_dict.has_key(sum) and sum <= max:
                result_list.append(sum)
                print "%d^3 + %d^3 = %d" % (sum_dict[sum][0], sum_dict[sum][1], sum)
                print "%d^3 + %d^3 = %d" % (int(round(pow(cubs[i], 1./3))), int(round(pow(cubs[j], 1./3))), sum)
            else:
                sum_dict[sum] = (int(round(pow(cubs[i], 1./3))), int(round(pow(cubs[j], 1./3))))
    
    return len(result_list)

if __name__ == '__main__':
    n = find_double_cublic_number(1000000)
    print "--------------------------------n"
    print n, "results found."

1 2  下一页

Tags:有道 难题 立方

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接