擅长:python、mysql、java
<p>有趣的问题,这里有一个可能的解决方案:</p>
<pre><code>import math
def min_dist(a, b):
dist = []
for Pa in a:
for Pb in b:
d = math.sqrt(
math.pow(Pa[0] - Pb[0], 2) + math.pow(Pa[1] - Pb[1], 2))
dist.append([d, Pa])
return sorted(dist, key=lambda x: x[0])
def get_factors(N):
if N < 1:
return N
N2 = N / 2
NN = math.sqrt(N)
result = []
for a in range(1, N2 + 1):
for b in range(1, N2 + 1):
if N == (a * b):
result.append([a, b])
result = min_dist(result, [[NN, NN]])
if result:
return result[0][1]
else:
return [N, 1]
for i in range(801):
print i, get_factors(i)
</code></pre>
<p>该方法的关键是求出到笛卡尔点的最小距离[数学硕士(N) 你说,数学硕士(N) ]满足要求N=a*b,a&b整数。在</p>