python解法--序列求和之2019年第十届蓝桥杯决赛(国赛)

引言:记一次困难,唯一分解定理+dfs

题目描述

试题 D: 序列求和
本题总分:10 分
【问题描述】
学习了约数后,小明对于约数很好奇,他发现,给定一个正整数 t,总是可以找到含有 t 个约数的整数。小明对于含有 t 个约数的最小数非常感兴趣,并把它定义为St
在这里插入图片描述

【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

引理

在这里插入图片描述
比如说因子数为8

8=81 对应数为128 2的7次
8=4
2 对应数为24 2的3次乘3
8=2*4 对应数为54 2乘3的3次
显然在这个例子中,24是满足条件的最小数

所以先打个素数表,然后用DFS遍历一下就行了

python代码

prime = []
for i in range(2,1000):
    ok = 1
    for j in range(2,i):
        if i % j == 0:
            ok = 0
            break
    if ok:prime.append(i)
    if len(prime) == 60:
        break
# print(prime)
#存放对应的Si
res = [1]

#求幂
def get(ci, postion):
    t = 1
    for s in range(ci - 1):
        t *= prime[postion]
    return t

def dfs(x, now, j):
    if x == 1:
        return now
    t = 0
    for i in range(2, 61):
        if x % i == 0:
            if t == 0:
                t = dfs(x // i, now * get(i, j), j + 1)
            else:
                t = min(t, dfs(x // i, now * get(i, j), j + 1))
    return t
for x in range(2,61):
    w = dfs(x,1,0)
    res.append(w)
# print(len(res))
# print(res)
print(sum(res))

结果

292809912969717649

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/huadong_xiaolin/article/details/129951731