この課題を順番に説明するのが最も簡単だと思います。入力番号Nから始めて、次のことを行います。
- 最高の素因数を見つける
- 上記と下の数字をチェックNを、最高の素因数が高いかどうかを確認(すなわち最高の素因数N-1および/またはN + 1が倍以上であるN。
- より高いチェックし続け、および/または隣接する数字低下Nを最高要因が増加される方向での((N-2、N-3 ...)及び/又は(N + 2、N + 3···)などオン)
- どちらの方向にも、すでに見つけたものよりも高い素因数がなくなると、遭遇した最高の素因数を停止して出力します。
例を見てみましょう:
245素因数があり5, 7, 7ます。その隣人は次のとおりです。
244 -> 2,  2,  61
245 -> 5,  7,  7
246 -> 2,  3,  41
最高の素因数は両方向に増加しているため、次の隣接要素を調べる必要があります。
243 -> 3,   3,  3,  3,  3
244 -> 2,   2,  2,  61
245 -> 5,   7,  7
246 -> 2,   3,  41
247 -> 13,  19
最高の素因数は両方向で減少しているため、遭遇した最高の素因数は61であり、したがって返されるべきです。
もう一つの例:
を見てみましょう1024。その主な要因は2, 2, 2, 2, 2, 2, 2, 2, 2, 2です。最近傍の素因数は次のとおりです。
1023 -> 3, 11, 31
1024 -> 2,  2,  2,  2,  2,  2,  2,  2,  2,  2
1025 -> 5,  5, 41
最高の素因数から、両方の方向に増加している2の31か41。隣人を見てみましょう:
1022 -> 2, 7,  73
1023 -> 3, 11, 31
1024 -> 2,  2,  2,  2,  2,  2,  2,  2,  2,  2
1025 -> 5,  5, 41
1026 -> 2,  3,  3, 19
の最高の素因数1022は73であり、の最高の素因数1026は19です。以来は19より低くなっている41、我々はそれに興味を持っていないです。Nより小さい数ではまだ増加しているので、その方向の次のものを確認します。
1021 -> 1021
1022 -> 2, 7,  73
1023 -> 3, 11, 31
1024 -> 2,  2,  2,  2,  2,  2,  2,  2,  2,  2
1025 -> 5,  5, 41
1026 -> 2,  3,  3, 19
1021 は素数であり、私たちが遭遇した最高の素数なので、返されるべきです。
ルール:
- あなたは、よりN大きく1、より小さくのみ正になり2^31-2ます。
- 入力形式と出力形式はオプションですが、数字は10進数でなければなりません。
- 最高値がその方向に増加している限り、より高い素数の検索を続ける必要があります。方向は互いに独立しています。
テストケース:
フォーマット: N, highest_factor
2, 3
3, 3
6, 7
8, 11
24, 23 
1000, 997
736709, 5417 
8469038, 9431
N=21素因数がないため、実際にはエッジケースのようです。したがって、続行するかどうかを判断するために比較できる最大素因数はありません。
                
2Nに対して最高の素因数を得たとしましょう。それ5からN-1と61N + 1に対して得ます。次に19、N-2と67N + 2 を取得します。我々は、下の数字をしようとしているので維持する必要があります19>5から、または停止5<61?すなわち、最大値はサイドごとに保持されますか?(例が数学的に可能かどうかは