Pythonで約数の個数が偶数か奇数かを判定する方法
ある整数 n が与えられたとき、その約数の総数が偶数か奇数かを判定することを考えます。
例えば、入力が n = 75 の場合を見てみましょう。75 の約数は [1, 3, 5, 15, 25, 75] の 6 個あるため、出力は「偶数(Even)」となります。
効率的な解法のポイント
この問題は、シンプルかつ効率的なアプローチで解くことができます。鍵となるのは、次の数学的性質です。
「約数の個数が奇数になるのは、その数が完全平方数である場合のみ」
これは、約数が通常 d と n/d のペアで現れるためです。しかし、n が完全平方数の場合、√n は自分自身とペアになるため、約数の総数が奇数になります。逆に言えば、数が完全平方数でなければ、約数の個数は必ず偶数です。
したがって、与えられた数が完全平方数かどうかを確認するだけで、「奇数(Odd)」か「偶数(Even)」かを即座に判定できます。すべての約数を列挙する必要がないため、非常に高速に動作するのが魅力です。
アルゴリズムの手順
- n < 1 の場合は処理を終了して戻る
- n の平方根を計算し、sqrt に代入する
- sqrt × sqrt が n と一致する場合、「Odd(奇数)」を返す
- それ以外の場合は、「Even(偶数)」を返す
Pythonでの実装例
def solve(n):
if n < 1:
return
sqrt = n**0.5
if sqrt*sqrt == n:
return 'Odd'
else:
return 'Even'
n = 75
print(solve(n))
入力
75
出力
Even
より堅牢な実装:math.isqrt() の活用
なお、非常に大きな数を扱う場合、n**0.5 のような浮動小数点演算では誤差が生じる可能性があります。Python 3.8 以降では、math.isqrt() 関数を使うことで正確な整数の平方根を計算でき、より安全な実装が可能です。
import math
def solve(n):
if n < 1:
return
sqrt = math.isqrt(n)
if sqrt * sqrt == n:
return 'Odd'
else:
return 'Even'
n = 75
print(solve(n))
この方法なら、大きな整数に対しても誤差なく完全平方数の判定が行え、約数の個数の偶奇を正確に求めることができます。
-
【Python】約数の個数が偶数か奇数かを判定するプログラムの書き方
この記事では、ある整数の約数の個数が偶数か奇数かを判定するPythonプログラムについて、その考え方と実装方法をわかりやすく解説します。 問題文 ある数「n」が与えられたとき、その約数の総数が偶数であるか奇数であるかを判定してください。 例えば、n = 10 の場合、約数は 1, 2, 5, 10 の4つなので「偶数」。一方、n = 100 の場合は 1, 2, 4, 5, 10, 20, 25, 50, 100 の9つとなり「奇数」となります。 アプローチ:約数を実際に数える 最も基本的な方法は、すべての約数を見つけ、その個数が偶数か奇数かをチェックすることです。 ここで重要なのは、約数
-
Pythonで数値が奇数か偶数かを判定する方法を解説
Pythonで数値が奇数か偶数かを判定する方法 Pythonでは、剰余演算子(%)を使うことで、数値が奇数か偶数かを簡単に判定できます。剰余演算子は「余り演算子」とも呼ばれ、ある数を別の数で割ったときの余りを求めるための演算子です。 判定の考え方はシンプルです。対象の数値を2で割り、その余りを確認します。余りが0であれば偶数、0以外(1)であれば奇数であると判断できます。 サンプルコード no = int(input(enter number)) if no % 2 == 0: print({} is even.format(no)) else: print({} is odd