[アルゴリズム解答][Python]伯準6588号:Goldバッハの推測



白駿6588問題リンク:https://www.acmicpc.net/problem/6588


📑 問題の説明


金バッハは、4つ以上の偶数を2つの奇数の小数の和として表すことができると推測した.
6以上、1000000以下の偶数が与えられた場合、与えられた数に対して2つの奇数と小数を求めるプログラムを記述する.
入力:6より大きく1000000未満の偶数(0を入力してプログラムを終了)
出力:「n=a+b」に出力します.数字がなければ、「Goldbach'sの推測は間違っています.」しゅつりょく

💡 トラブルシューティング方法


タイムアウトの問題に注意してください.
key point
1.少数の場合にエラトスティンを用いた体を得る.
2.0を入力する前に小数を求める必要がありますので、ループ文の前に100000以下の小数を1回だけ要求します.
(2番がタイムアウトするとは知らなかったので….😂)

💻 コード#コード#

import sys


if __name__ == '__main__':
    t = -1

    tf_list = [True for i in range(1000001)]
    tf_list[0] = False
    tf_list[1] = False
    for i in range(2, 1001):
        if (tf_list[i] == True):
            for k in range(i + i, 1000001, i):
                tf_list[k] = False


    while(1):
        t = int(sys.stdin.readline())

        if t == 0:
            break

        check = -1
        for i in range(3, t, 2):
            if (tf_list[i] and tf_list[t - i]):
                print(t, "=", i, "+", t - i)
                check = 1
                break
        if (check == -1):
            print("Goldbach's conjecture is wrong.")

💟 詳細

  • タイムアウトの原因...マスター...