【Python】約数の個数が偶数か奇数かを判定するプログラムの書き方
この記事では、ある整数の約数の個数が偶数か奇数かを判定するPythonプログラムについて、その考え方と実装方法をわかりやすく解説します。
問題文
ある数「n」が与えられたとき、その約数の総数が偶数であるか奇数であるかを判定してください。
例えば、n = 10 の場合、約数は 1, 2, 5, 10 の4つなので「偶数」。一方、n = 100 の場合は 1, 2, 4, 5, 10, 20, 25, 50, 100 の9つとなり「奇数」となります。
アプローチ:約数を実際に数える
最も基本的な方法は、すべての約数を見つけ、その個数が偶数か奇数かをチェックすることです。
ここで重要なのは、約数は必ずペア(i と n ÷ i)で現れるという性質です。これを利用すれば、1から √n までの範囲だけを調べるだけでよく、計算量を O(√n) に抑えられます。ただし、n が平方数の場合は i = n ÷ i となるため、そのときに限りカウントを1だけ増やします。
実装例
import math
def countDivisors(n) :
count = 0
# すべての約数を計算する
root = int(math.sqrt(n)) + 2
for i in range(1, root) :
if (n % i == 0) :
# 約数が等しい場合(平方数の平方根)は1を加算、それ以外は2を加算
if (n // i == i) :
count = count + 1
else :
count = count + 2
if (count % 2 == 0) :
print("Even")
else :
print("Odd")
# 動作確認用のドライバープログラム
print("The count of divisor: ")
countDivisors(100)
出力結果
The count of divisor: Odd
n = 100 は 10 × 10 と表せる平方数であり、約数が9個(奇数)あるため、「Odd」と出力されます。
補足:数学的な性質を使ったより簡単な判定法
実は、約数の個数が奇数になるのは「その数が完全平方数である場合」だけです。これは、約数が d と n ÷ d のペアで現れる中で、d = n ÷ d(つまり d = √n)となるケースが存在するのは平方数だけだからです。
この性質を使えば、約数を数え上げる必要すらなく、n が平方数かどうかを確認するだけで判定できます。
import math
def isPerfectSquare(n) :
root = int(math.sqrt(n))
return root * root == n
def checkDivisorCount(n) :
if isPerfectSquare(n) :
print("Odd") # 平方数なら約数の個数は奇数
else :
print("Even") # それ以外は偶数
checkDivisorCount(100) # 出力: Odd
checkDivisorCount(10) # 出力: Even
こちらの方法なら計算量は O(1) 相当となり、非常に大きな数でも高速に判定できます。
まとめ
この記事では、与えられた整数の約数の個数が偶数か奇数かを判定する2つの方法を紹介しました。
- 1から √n までをループして約数を数える方法(O(√n))
- 完全平方数かどうかを判定するだけで済ませる方法(ほぼ O(1))
競技プログラミングやアルゴリズムの学習において、約数の個数の偶奇は頻出のトピックです。「平方数だけが奇数個の約数を持つ」という性質はぜひ覚えておきましょう。
-
Pythonで奇数桁と偶数桁の合計の差を判定するプログラム
この記事では、与えられた問題を解決するための解法とアプローチについて詳しく解説します。 問題文 整数が1つ与えられたとき、奇数桁の合計と偶数桁の合計の差が0であるかどうかを判定する必要があります。 素朴なアプローチ(ブルートフォース) 最も単純な方法は、数値を構成するすべての偶数桁と奇数桁の合計をそれぞれ計算し、その差を求めることです。しかし、この方法では各桁を順番に処理するため、桁数に比例した計算時間が必要になります。 効率的なアプローチ:11の倍数判定を活用 計算時間を削減するために、「暗算の数学」でよく知られている性質を利用します。それは「ある整数の奇数桁の合計と偶数桁の合計の差が0にな
-
【Python】約数の個数が偶数か奇数かを判定するプログラムの書き方
この記事では、ある整数の約数の個数が偶数か奇数かを判定するPythonプログラムについて、その考え方と実装方法をわかりやすく解説します。 問題文 ある数「n」が与えられたとき、その約数の総数が偶数であるか奇数であるかを判定してください。 例えば、n = 10 の場合、約数は 1, 2, 5, 10 の4つなので「偶数」。一方、n = 100 の場合は 1, 2, 4, 5, 10, 20, 25, 50, 100 の9つとなり「奇数」となります。 アプローチ:約数を実際に数える 最も基本的な方法は、すべての約数を見つけ、その個数が偶数か奇数かをチェックすることです。 ここで重要なのは、約数