Eterna Esploristo

求道者を目指す者が日々の活動で得たものを記す場所

プログラミング

pythonで完全数を求める

 「完全数」というものを聞いたことがあるでしょうか。「完全数って何?」という人も多いかもしれませんね。
 ある数Aが、その約数(ただしAを含まない)の総和と等しいとき、その数Aを「完全数」といいます。言葉で説明するとわかりづらいですね。たとえば、6の約数は「1, 2, 3, 6」ですが、このとき、

6 = 1 + 2+ 3

ですので、6は完全数です。一方、10の約数は「1, 2, 5, 10」です。このとき、

10 ≠1 + 2 + 5

ですので、10は完全数ではありません。

 この「完全数」を計算するプログラムをpythonで書いてみました。あまり長くならずにできました。


for n in range(2,10000):
    x=[1]
    for i in range(2,int(n**0.5+1)):
        if n/i==int(n/i):
            x.append(int(i))
            if n/i!=i:
                x.append(int(n/i))

    sx=0
    for i in range(len(x)):
        sx==sx+x[i]
    if sx==n:
        print(n)

 このプログラムでは、2から9999の範囲にある完全数を求められます。1行目のカッコの中を変えると、完全数を求める範囲を変えられます。例えば、50から10000にしたい場合は、”in range(50,10001)”と書けばOKです。
 プログラムの前半でnの約数の集合xを作成し、後半で集合xの全要素の総和sxがnと等しいか判定しています。
 特に何の工夫もない、頭から全部計算していく力任せの方法ですが、参考にしてみてください。

コメントを残す




This site uses Akismet to reduce spam. Learn how your comment data is processed.

関連記事