【Python】約数を調べたい!整数を入れると約数を返すツールを作成!


今回は約数を調べるツールを作成して見たいと思います。

約数って何だったかにゃ?よく覚えていないんだにゃー。

確かに約数って普通に生活していると使わないですし、覚えていない人も多いと思います。
でも、算数ってしっかりと理屈に基づいて作られているので、プログラミングと相性がいいんです。そこで今回は、約数を求めることができる関数を作っていきたいと思います。

わかったにゃ。頑張って理解してみるんだにゃ。
- 約数について
- 目的を分解して、関数化する方法について
- コマンドラインから引数を使う方法について
約数って何だっけ?

約数は、小学校で学びますが、よく覚えていない人もいると思うので、まずは、約数について確認して見たいと思います。
整数Nを整数aで割り切れるときaはNの約数と言います。
つまり、整数16で見ると、
(1×16) (2×8) (4×4)
の3つの式が16になります。
ここで構成される要素である
1, 2, 4, 8, 16
が16の約数となります。

わかったようなわからないような感じなんだにゃ。

そうですよね。でもポイントを押さえれば、関数化できるくらい簡単なんです。ポイントは次の通り。
- 1と整数Nは必ず約数になる
- 2からN/2まで、順に整数Nを割っていき、割り切れた場合の数字とその答えが約数になる

このようにして、対象が何でできているのか分解し、考えることで一見難しいことも、簡単にできます。そこまでできれば、あとは一つひとつ関数化していくだけですね。
では、実際に関数を作ってみます。
1と整数Nは必ず約数になる

約数を入れるリストを作ります。ここに最初から1と整数N(変数num、以下num)を格納しておけば、いいですね。
divisors = [1, num]
2以降の約数を求める

2以降の約数については、2からnum/2まで順に見ていくことで、計算できます。
numをそれぞれ見ていって、割り切れればその数とその商をリストに追加していきます。

リストを集合型setにして重複を取り除き、並び替えすれば、約数が求められるんだにゃ。
num = 16
divisors = [1, num]
for i in range(2, int(num/2)+1):
if num % i == 0:
divisors.append(i)
divisors.append(int(num / i))
divisors = sorted(set(divisors))
print(divisors)
>> [1, 2, 4, 8, 16]

pyhonでは、数字を割ると小数点が出てしまうためint()を使って整数に戻しているんだにゃ。
関数化とコマンドライン引数

それでは、最後に約数を求めるツールとして関数化してみます。ツールとして使えるようにコマンドライン引数から数値を返せるようにしてみます。
import sys
def make_divisors(num):
divisors = [1, num]
for i in range(2, int(num/2)+1):
if num % i == 0:
divisors.append(i)
divisors.append(int(num / i))
divisors = sorted(set(divisors))
print(divisors)
make_divisors(int(sys.argv[1]))

sysをインポートしてsys.argv[1]を引数にすることで簡単に求められるんだにゃ。ちなみにコマンドライン引数は常に文字列のため、数字として使用する場合は、int型にしてやるんだにゃ。

これでコマンドから「python ファイル名 引数」を指定してやることで、約数のリストが表示されるツールができましたね。早く覚えていくならば、実行環境を考えながら、色々作ってみることをお勧めします。
プログラミングを学ぶならTechAcademy(テックアカデミー)がおすすめ!

独学で苦戦している人は、一度しっかりと基礎を学ぶと次のステップへ進めますよ。今のおすすめは、TechAcademy(テックアカデミー)ですね。
- オンラインで選抜された現役エンジニアから学ぶことができる
- 自宅からWeb制作・プログラミング・アプリ開発など幅広い分野を学べる
- 学ぶだけではなく、転職の支援、副業に活かせるスキルの習得、副業の仕事紹介まで行っている

無料体験や相談もあるから、一度試してみてもいいんだにゃ!
\無料体験、無料相談はこちらから/