数的分解 蓝桥 Python

结果:40785

定义判断是否含有 2 和 4 的函数
一层循环抽出1-2019中的不含2, 4的数字,从82亿(2019^3)计算量压缩至10亿计算量,再剪枝,,

# coding=utf8
#
import time

a = time.time()
def FT(k):  # 判断数字中是否含有 2 或 4
    if '2' in str(k) or '4' in str(k):
        return False
    return True

# 缩小规模 从2019^3 -> len(may_num)^3
may_num = []
for i in range(1, 2019):
    if FT(i):
        may_num.append(i)
# print(len(may_num), may_num)

SUM = set()
# print(2019/3)  # 673 确定第一层循环的最多次数
for i in range(len(may_num)):
    if may_num[i] >= 673:
        break
    for j in range(i+1, len(may_num)):  # 注意 从i+1开始  i, j 重复
        if may_num[i] + may_num[j] >= 2019:
            break
        for k in range(j+1, len(may_num)):
            if may_num[i] + may_num[j] + may_num[k] == 2019:
                SUM.add((may_num[i], may_num[j], may_num[k]))
                break

b = time.time()
print(len(SUM), b - a)


你可能感兴趣的:(蓝桥,python)