也玩有道难题的双立方数问题:Python 版解法
2010-09-22 11:24:59 来源:WEB开发网发现大家都在玩这个,用 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."
- ››有道手机词典
更多精彩
赞助商链接