Pythonで数値が醜い数(Ugly Number)かどうかを判定するプログラム
ある整数 n が与えられたとき、その素因数が 2・3・5 のみで構成されているかどうかを判定する問題を考えてみましょう。この条件を満たす正の整数は「醜い数(Ugly Number)」と呼ばれます。
例えば、入力が n = 18 の場合を考えます。18 の素因数は 2 と 3 だけなので、出力は True となります。
アルゴリズムの手順
この問題は、次の手順で解くことができます。
n < 0の場合はFalseを返します。- チェック対象の因数として [2, 3, 5] のリストを用意します。
- 各因数
iについて、nがiで割り切れる間、nをiで割り続けます。 - 最終的に
nが 1 になっていればTrue、それ以外ならFalseを返します。
実装例(Python)
以下のコードで実際の動作を確認してみましょう。
class Solution: def solve(self, n): if n < 0: return False factor = [2, 3, 5] for i in factor: while n % i == 0: n /= i return n == 1 ob = Solution() print(ob.solve(18))
入力
18
出力
True
コードの解説
このアルゴリズムのポイントは、2・3・5 を順番に試しながら、n がこれらの数で割り切れる限り割り続ける点です。すべての割り算が終わった時点で残った値が 1 であれば、元の数には 2・3・5 以外の素因数が含まれていなかったことになります。逆に 1 以外の値が残れば、7 や 11 などの別の素因数が存在したことを意味します。
また、負の数は醜い数とみなされないため、最初にチェックして除外しています。なお、n = 0 を渡すと while ループが無限に続く可能性があるため、実運用では 0 のケースもあらかじめ除外しておくと安全です。
-
Pythonで素数を判定するプログラムの書き方を徹底解説
はじめに この記事では、「与えられた数値が素数かどうかを判定する」という問題に対する解決策を、Pythonのコード例とともにわかりやすく解説します。 問題の概要 問題設定:ある数値が与えられたとき、その数が素数であるかどうかを判定するプログラムを作成します。 まず「素数」の定義をおさらいしましょう。1より大きい正の整数のうち、1とその数自身以外に約数を持たない数を素数(そすう)と呼びます。たとえば、2、3、5、7などはそれ以外の約数を持たないため、素数です。 プログラムの考え方 今回作成するプログラムでは、入力された数値が素数かどうかを以下の手順で判定します。 1以下の数値は素数ではない
-
Pythonでアームストロング数を判定するプログラムの書き方
この記事では、与えられた整数が「アームストロング数(Armstrong number)」であるかどうかを判定するための考え方と、Pythonによる具体的な実装方法を解説します。 問題の定義 整数 n が与えられたとき、その整数がアームストロング数であるかどうかを判定することを目標とします。 アームストロング数とは? n 桁の正の整数 abcd… が次の条件を満たすとき、この数は「n 次(オーダー n)のアームストロング数」と呼ばれます。 abcd... = a^n + b^n + c^n + d^n + … つまり、各桁の数字を「桁数乗」した値の総和が、元の数と一致するかを確認す