Skip to content

【paiza】「完全数とほぼ完全数」問題の解き方まとめ

  • SkillCheck
  • Code
  • PHP

📅 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」などの条件を追加すれば対応可能です。

時間があるときに少しずつスキルチェックをしていくことで、コーディングのスキルも上がっていくと思います。これからも挑戦、ブログにまとめをしていきますので、どうぞまたご覧ください!!

▽ソースコードはこちら▽

GitHub

← PrevNext →
  • Gatsby Blog by Katsuhiro Shiraishi