【paiza】「完全数とほぼ完全数」問題の解き方まとめ
📅 April 15, 2020
•⏱️3 min read
この頃、Paizaのスキルチェックに取り組んでいます。 まぁ、理由としてはコロナの自粛であったり、転職に伴う休暇の増加などがあげられますね〜
スキルチェックを解く中で「完全数」という概念が… 文系出身エンジニアとしては、「まず完全数がわからない!」という緊急事態に陥りました…w
なので、ここで
- 完全数とは何か?
- 完全数問題の解き方 などをまとめておこうと思います。
完全数とは
完全数(かんぜんすう、英: perfect number)とは、自分自身を除く正の約数の和に等しくなる自然数のことである。完全数の最初の3個は 6 (= 1 + 2 + 3)、28 (= 1 + 2 + 4 + 7 + 14)、496 (= 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248) である。 (Wikipedia)
説明としては上記の通り。
完全数問題の解き方
プログラミングテストでの解き方は以下の手順です。 (問題文、ならびに正解コードはPaizaの規律により記載できないのでご了承ください。)
- 約数を探す
- 約数をすべて足し合わせる
- 与えられた数字と比較する
コードはPHPで記述しています。
約数を探す&約数をすべて足し合わせる
約数は下記のコードで探すことが可能です。
for ($i = 1; $i < $value; $i++) {
if ($value % $i === 0) {
$plus += $i;
}
}
約数ということはつまり「その数字で元の数字が割り切れる=あまりが0」であるため、そのように条件分岐を記載。「条件分岐を通り抜けた数字は変数に追加する」という処理を行うことで、約数をすべて足し合わせるという部分が完了します。
与えられた数字と比較する
上記で足し合わせた数字が、与えられた数字と一致するかを条件式で判別します。 もしも、「ほぼ完全数」などの条件が与えられた場合は、「$plus += 1」もしくは「$plus -= 1」などの条件を追加すれば対応可能です。
時間があるときに少しずつスキルチェックをしていくことで、コーディングのスキルも上がっていくと思います。これからも挑戦、ブログにまとめをしていきますので、どうぞまたご覧ください!!
▽ソースコードはこちら▽