第一次用打表过的。。这题要5秒过的话用暴力枚举必超时。。网上说K最大就21,我的Python光打21个值就花了半个小时。。ORZ,如果有大牛可以5s不打表过的话,表示五体投地
打表代码:
def factor(num):
if num == 1:
return []
for i in range(2, num + 1):
if num % i == 0:
res = factor(num / i)
res.append(i);
return res
def all_factor(factors):
n = len(factors)
s = set()
for i in range(0, 2 ** n - 1):
res = 1
for j in range(0, n):
if i & (2 ** j) == (2 ** j):
res *= factors[j]
s.add(res)
return sum(s)
for num in range(2, 200000):
pair = all_factor(factor(num))
if(all_factor(factor(pair)) == num and num < pair):
print 'r.append([' + str(num) + ',' + str(pair) + '])'
AC代码
import sys
r = []
r.append([220, 284])
r.append([1184, 1210])
r.append([2620, 2924])
r.append([5020, 5564])
r.append([6232, 6368])
r.append([10744, 10856])
r.append([12285, 14595])
r.append([17296, 18416])
r.append([63020, 76084])
r.append([66928, 66992])
r.append([67095, 71145])
r.append([69615, 87633])
r.append([79750, 88730])
r.append([100485, 124155])
r.append([122265, 139815])
r.append([122368, 123152])
r.append([141664, 153176])
r.append([142310, 168730])
r.append([171856, 176336])
r.append([176272, 180848])
r.append([185368, 203432])
for line in sys.stdin:
index = int(line.strip()) - 1
print r[index][0], r[index][1]