关于#运行#的问题,如何解决?



def main():
    #code here
    arr=[]
    for i in range(2,100):
        num=0
        for j in range(2,i):
            if i%j==0:
                num+=1
        if num==0:
            arr.append(i)
    N=int(input())
    arr2=[]
    for i in arr:
        for j in arr:
            if i+j==N:
                arr2.append(i)
                arr2.append(j)
    print("{} {}".format(arr2[0],arr2[1]))
    pass


if __name__ == '__main__':
    main();

img

img


不能完美运行,怎么修改?

看你提供的信息后面修改之后是超时的错误是吗,修改如下看看:

N = int(input())


def main():
    # code here
    arr = []
    for i in range(2, N):
        for j in range(2, i):
            if i % j == 0:
                break
        else:
            arr.append(i)

    arr2 = []
    for i in arr:
        for j in arr:
            if i + j == N:
                arr2.append(i)
                arr2.append(j)
                break
        else:
            continue
        break
    print("{} {}".format(arr2[0], arr2[1]))


if __name__ == '__main__':
    main()

主要优化了循环次数,节省运行时间

循环耗时太多了,改成下面这样试试

N = int(input())


def is_prime(x):
    for i in range(3, x, 2):
        if x % i == 0:
            return False
    return True


def main():
    # code here
    for i in range(2, N):
        data = N - i
        if is_prime(i) and is_prime(data):
            print("{} {}".format(i, data))
            break


if __name__ == '__main__':
    main()

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7797889
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:每次选择一个数放到最后,把数组调成有序需要多少次操作?
  • 除此之外, 这篇博客: 数据结构与算法之美读后感中的 什么的问题适合用动态规划来解决? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    一个模型三个特征

    多阶段最优解模型:一个问题可以分解成多个阶段来实施,每个阶段都有多个决策组,最后在这些决策组的序列中找到最优解。

    • 无后效性 两层含义:一层:当前阶段的状态确定后,不会被后面阶段的状态影响。二层:只关心前一个阶段的状态值,而不关心是怎么走到这个状态的。
    • 最优子结构 : 最优解都可以通过子结构的最优解推导出来。问题的最优解包含子问题的最优解。
    • 重复子问题,会出现重复的状态。
  • 您还可以看一下 千锋老师的什么是云计算? 课程中的 杨哥知识普及小课堂之 什么是云计算?小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^