ZOJ-2520

第一次用打表过的。。这题要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]            


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值