今日はHarshad Numberについて学びましょう。
数とは何かを理解した上で、ある数がHarshad Numberであるかどうかをチェックするプログラムを実装していきます。
ハーシャードナンバーとは?
元の数字がその桁の和で割り切れる場合、その数字はハーシャド数です。
ハーシャド数とは、「abcdは(a+b+c+d)で割り切れる」という定義です。
お勧めの記事 Pythonでアームストロング数を確認する方法は?
Harshad Number の例
例1:155
桁の和=1+5+5=11
しかし、155は11で割り切れない。
したがって、この数はハーシャド数ではない。
例2:156
桁の和=1+5+6=12
しかし、156は12で割り切れる。
したがって、この数はハーシャド数です。
Harshad数をチェックするアルゴリズム
ある数字がHarshad数であるかどうかをチェックするためのすべてのステップは、次のとおりです。
- 入力された数字を読み取る
-
- 後で結果を確認するために、数値のコピーを作成します。
- 結果変数を作成(0に設定)
- 4.数字を一桁ずつたどるwhileループを作成します。
- 反復毎にresultを一桁ずつ増加させる
-
- コピーした数字を得られた結果で割る。
-
- 完全に割り切れるなら、その数字はハーシャド数であり、そうでないなら、それはハーシャド数ではありません。
Harshad Number の擬似コード
以下のコードは、ある数字が Harshad Number であるかどうかをチェックする擬似コードです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
READ n MAKE A COPY OF n result=0 CHECK DIGIT BY DIGIT: WHILE n!=0
GET CURRENT DIGIT : digit = n % 10
UPDATE RESULT : result = result + digit
TRIM THE LAST DIGIT : n = n / 10
ENDWHILE
CHECK FOR HARSHAD NUMBER: IF COPY OF n % result == 0
PRINT "HARSHAD NUMBER"
ELSE
PRINT "NOT A HARSHAD NUMBER"
|
Python で Harshad 数をチェックするコード
Harshad Numberとは何か、それを実装する手順がわかったところで、Harshadチェックを一行ずつ実装していきましょう。
内部変数の作成
まず、入力 n
を受け取り、元の数値をいくら変更しても大丈夫なように、入力のコピーを保存します。
また、結果を 0 で初期化します。
そのためのコードを以下に示す。
1
2
3
4
|
n = input ()
n = int (n)
copy_n = n
result = 0
|
番号のトラバースと結果の更新
各桁にアクセスするために、数値の modulus
( mod 10 ) を取って数値の最後の桁を抽出します。
次のステップでは、前の結果と現在の桁の和として結果を更新します。
最後のステップは、数字を10で割って最後の一桁を削除することです。
同じ処理を、数字がなくなるまで繰り返す。
以下はそのコードです。
1
2
3
4
|
while (n! = 0 ):
digit = n % 10
result = result + digit
n = int (n / 10 )
|
ハーシャードナンバーであるかどうかのチェック
最後に、先ほど作成した数のコピーが、計算した結果で割り切れるかどうかをチェックします。
そのためのコードを以下に示します。
1
2
3
4
|
if (copy_n % result = = 0 ):
print ( "Harshad Number!" )
else :
print ( "Not an Harshad Number!" )
|
コードの出力サンプル
とりあえず、2つの入力に対してプログラムをテストしてみました。
両方の出力は以下の通りです。
番号1:156
156 Harshad Number! |
番号 2: 121
121 Not a Harshad Number! |
まとめ
しかし、ここで立ち止まらないでください! 読み続けて学んでください!