Python
 Computer >> コンピューター >  >> プログラミング >> Python

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))

この方法なら、大きな整数に対しても誤差なく完全平方数の判定が行え、約数の個数の偶奇を正確に求めることができます。

  1. 【Python】約数の個数が偶数か奇数かを判定するプログラムの書き方

    この記事では、ある整数の約数の個数が偶数か奇数かを判定するPythonプログラムについて、その考え方と実装方法をわかりやすく解説します。 問題文 ある数「n」が与えられたとき、その約数の総数が偶数であるか奇数であるかを判定してください。 例えば、n = 10 の場合、約数は 1, 2, 5, 10 の4つなので「偶数」。一方、n = 100 の場合は 1, 2, 4, 5, 10, 20, 25, 50, 100 の9つとなり「奇数」となります。 アプローチ:約数を実際に数える 最も基本的な方法は、すべての約数を見つけ、その個数が偶数か奇数かをチェックすることです。 ここで重要なのは、約数

  2. 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