teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

誤字の修正

2018/05/19 12:50

投稿

raccy
raccy

スコア21784

answer CHANGED
@@ -10,9 +10,9 @@
10
10
 
11
11
  ということで、無条件で`2`が数列の中に追加できます。`N`個求めるという話でしたが、実際は`3`以上からなる`N-1`個の数列を見つければいいと言うことになります。これで、一個だけ最大が緩和されました。**と言いたいところですが、これは使っても使わなくてもどっちでも良いです。**それより次の方法がなかなか高速であるため、1個ぐらい多くても問題ないからです。
12
12
 
13
- では、`2`以外の数を考えていきましょう。`2`の時は必ず偶数になるという組合せを考えた物でした。同じように、必ずある数の倍数になる組合せというのはあるのでしょうか?たとえば、`[3, 5, 7, 11, 13]`は3の倍数です。このとき`3`で割った余りを見てみましょう。`[0, 2, 1, 2, 1]`となりますが、これの合計も`3`の倍数です。そうです、合計がある数`X`の倍数にあるということは、`X`でそれぞれを割った余りの合計も`X`の倍数になると言うことです。しかし、`3`の場合は組合せが複雑なので、うまく求められません。では、`5`の場合は?`[1, 1, 1, 1, 1]`の合計は`5`です。きづきましたか?`5`で割った余りが`1`になる数を5つ集めれば必ず`5`になります。もしそういう数が大量にあっても、どの5個を集めても余りの合計は`5`になりますので、その数同士の和も`5`の倍数です。つまり、単純に`5`で割った余りが`1`になる数を探せば、その数同士の組合せは必ず`5`の倍数、合成数になると言うことにります。
13
+ では、`2`以外の数を考えていきましょう。`2`の時は必ず偶数になるという組合せを考えた物でした。同じように、必ずある数の倍数になる組合せというのはあるのでしょうか?たとえば、`[3, 5, 7, 11, 13]`は3の倍数です。このとき`3`で割った余りを見てみましょう。`[0, 2, 1, 2, 1]`となりますが、これの合計も`3`の倍数です。そうです、合計がある数`X`の倍数にあるということは、`X`でそれぞれを割った余りの合計も`X`の倍数になると言うことです。しかし、`3`の場合は組合せが複雑なので、うまく求められません。では、`5`の場合は?`[1, 1, 1, 1, 1]`の合計は`5`です。きづきましたか?`5`で割った余りが`1`になる数を5つ集めれば必ず`5`になります。もしそういう数が大量にあっても、どの5個を集めても余りの合計は`5`になりますので、その数同士の和も`5`の倍数です。つまり、単純に`5`で割った余りが`1`になる数を探せば、その数同士の組合せは必ず`5`の倍数、合成数になると言うことにります。
14
14
 
15
- おわかりですね。`5`で割った余りが`1`になる素数を単純に探していけばいいと言うことです。懸念すべきは、その素数が上限である`55555`を越えないと言うことです。ご安心ください。`55555`以下で条件を満たす素数は**1408**個もあります。この1408個の素数から、適当に`N`個取り出せば、任意の5個の和が合成数(5の倍数)になる数列ができあがると言うことです。
15
+ もうおわかりですね。`5`で割った余りが`1`になる素数を単純に探していけばいいと言うことです。懸念すべきは、その素数が上限である`55555`を越えないと言うことです。ご安心ください。`55555`以下で条件を満たす素数は**1408**個もあります。この1408個の素数から、適当に`N`個取り出せば、任意の5個の和が合成数(5の倍数)になる数列ができあがると言うことです。
16
16
 
17
17
  後は簡単ですね。`5`で割った余りが`1`になる素数を`N`個探して、それを表示するだけです。
18
18