[原题]http://www.shiyanbar.com/ctf/1859
方案一:用时6.7s。
整理成:x=(400*y)/(y-200),得到y下限200,x=y时,得到y上限600
当y=599,求x下限为600.50多,取整601,当y=201,x为最大值80400。
count = 0
for x in range(601,80401):
for y in range(201,600):
if (1/x)+(1/(2*y))==(1/400):
count += 1
print(count)
方案二:用时0.1s
整理成:x=(400*y)/(y-200),得到y下限200,x=y时,得到y上限600,直接利用等式求解,优化速度。尽量减少用迭代器,降低计算维度。
count = 0
for y in range(201,600):
if (400*y)%(y-200)==0: #x=(400*y)/(y-200),因为x为整数,所以(400*y)%(y-200)==0
count += 1
print (count)