Pythonで2つの数が友愛数(アミカブルナンバー)かどうかを判定する方法
友愛数(アミカブルナンバー)とは、互いに異なる2つの数のうち、それぞれの「真の約数」(その数自身を除く約数)の総和が、相手方の数とちょうど一致するような数のペアのことです。有名な例としては「220」と「284」の組み合わせが知られています。
2つの数が友愛数であるかどうかを判定するには、まず対象の数について約数の総和を求める関数を定義し、続いてその関数を呼び出して2つの数を比較する別の関数を定義します。約数の総和は、平方根までの範囲でループ処理を行い、剰余演算子(%)を使って割り切れるかを確認することで、効率的に計算できます。
以下に実際の実装例を示します。
サンプルコード
import math
def divided_sum_val(my_val) :
res = 0
for i in range(2, int(math.sqrt(my_val)) + 1) :
if (my_val % i == 0) :
if (i == int(my_val / i)) :
res = res + i
else :
res = res + (i + int(my_val / i))
return (res + 1)
def check_amicable(x, y) :
if (divided_sum_val(x) != y) :
return False
return (divided_sum_val(y) == x)
first_num = 220
second_num = 288
print("The numbers are :")
print(first_num)
print(second_num)
if (check_amicable(first_num, second_num)) :
print ("The given numbers are amicable in nature")
else :
print ("The given numbers are not amicable in nature")
実行結果
The numbers are : 220 288 The given numbers are not amicable in nature
コードの解説
整数を引数に受け取る「divided_sum_val」という関数を定義します。この関数は、引数として渡された数の真の約数の総和を返します。
「for」ループを使い、2からその数の平方根までの範囲を反復処理しながら、割り切れるかどうかを剰余演算子で判定します。
ループ変数の値と、その数をループ変数で割った商が一致する場合(完全平方数の場合など)、重複して加算しないようループ変数の値のみを加算します。
それ以外の場合は、ループ変数の値と商の両方を合計に加算します。これにより、約数をペアごとに効率よく集計できます。
次に、2つの数を引数に受け取る「check_amicable」という関数を定義します。
この関数は内部で「divided_sum_val」を呼び出し、片方の数の約数の総和がもう片方の数と一致し、かつその逆も成り立つ場合に「True」を、そうでなければ「False」を返します。
判定対象となる2つの数(ここでは220と288)を変数として定義し、コンソールに出力します。
これら2つの数を引数として「check_amicable」を呼び出します。
判定結果に応じて、「友愛数である」または「友愛数ではない」というメッセージをコンソールに表示します。
補足:実際の友愛数の例
上記の例では220と288は友愛数ではありません。220の真の約数の総和は284であり、288とは一致しないためです。実際に友愛数であるペアで試したい場合は、220と284、または1184と1210などを入力してみてください。これらのペアでは「友愛数である」という結果が得られます。
-
Pythonで2つの数の公約数を求めるプログラムの書き方
はじめに この記事では、以下の問題文に対する解決方法について学んでいきます。 問題文 2つの整数が与えられたとき、それらに共通する約数(公約数)の個数を表示する必要があります。 アプローチの考え方 まず、入力として受け取った2つの数のうち、小さい方の値(最小値)を計算します。続いて、1からその最小値までの各値で2つの数を順番に割っていき、両方の数を割り切ることができるかどうかをループ処理で確認します。 条件が真(True)と評価されるたびに、カウンターを1ずつ増加させます。最終的なカウンターの値が、2つの数の公約数の個数となります。 実装例 それでは、以下のコードで実際の実装を見てみましょう。
-
Pythonで2つの数値を加算するプログラム:ビット演算による実装方法
この記事では、2つの数値を加算するという問題に対する解法とアプローチについて詳しく解説します。 問題の概要 2つの大きな数値が与えられ、それらを加算した結果を出力することが求められます。 最も単純なアプローチは、オペランド同士を「+」演算子で結ぶ方法です。また、2つの数値をリストなどのイテラブルに格納し、Python標準ライブラリに用意されている組み込み関数 sum() を利用する方法もあります。 しかし、これらのアプローチでは10進数に対して直接演算を行うため、計算コストが増大するという課題があります。 ビット演算を用いた別のアプローチ そこで次に、数値をビット単位で操作する別のアプローチを