[300]6388号キム・バッハの推測



6388号キム・バッハ的推测


質問する


1742年、ドイツのアマチュア数学者クリスティアン・ゴルドバッハはレオン・ハトオラーに手紙を書いて、以下の推測を提案した.
4より大きいすべての偶数は、2つの奇数小数の和として表すことができる.
例えば、8は3+5と表すことができ、3と5はいずれも奇数の小数である.また、20=3+17=7+13、42=5+37=11+31=13+29=19+23となる.
この推測はまだ未解決の問題だ.
100万以下のすべての偶数について、この推測を検証するプログラムを作成してください.

入力


入力は、1つ以上のテストケースで構成されます.テストボックスの数は100000個を超えない.
各試験箱は偶数整数nからなる.(6 ≤ n ≤ 1000000)
入力した最後の行にはゼロが表示されます.

しゅつりょく


各試験例について、n=a+bの形式で出力する.このとき、aとbは奇数小数である.数値と演算子はスペースで区切られています.nを生成する方法が複数ある場合、b−a出力は最大である.また、2つの奇数小数の和がnを表すことができない場合、「Goldbach's推定は間違っている」.出力します.

コピー例入力1

8
20
42
0

コピー例出力1

8 = 3 + 5
20 = 3 + 17
42 = 5 + 37

try1

//---- 세팅 ----//
const fs = require('fs');
const stdin = (
  process.platform === 'linux'
    ? fs.readFileSync('/dev/stdin').toString()
    : `\
8
20
42
13
0
`
).split('\n');

const input = (() => {
  let line = 0;
  return () => stdin[line++];
})();

//---- 풀이 -----//

const numberArr = [];

while (true) {
  const number = Number(input());
  if (number === 0) break;
  numberArr.push(number);
}

const isPrime = n => {
  if (n <= 1) return false;
  for (let i = 2; i * i <= n; i++) {
    if (n % i === 0) return false;
  }
  return true;
};

const goldbach = n => {
  for (let a = 2; a < n; a++) {
    const b = n - a;
    if (isPrime(a) && isPrime(b) && a % 2 !== 0 && b % 2 !== 0) {
      return [a, b];
    }
  }
  return [false, false];
};

const res = [];

numberArr.forEach(n => {
  const [a, b] = goldbach(n);
  res.push(a ? `${n} = ${a} + ${b}` : `Goldbach's conjecture is wrong.`);
});

console.log(res.join('\n'));

に答える


aは2からnに上昇した.
b n-aに設定します.
aとbはいずれも小数で奇数の場合に戻ります.
金バッハ数が存在しない場合、出力Goldbach's conjecture is wrong..