Pythonで数値が19で割り切れるかどうかを判定する方法
非常に大きな数値が与えられたとき、その数値が19で割り切れるかどうかを判定したいケースがあります。
例えば、入力が 86982 の場合、出力は「Divisible(割り切れる)」となります。
アルゴリズムの考え方:繰り返し加算法
この問題は「繰り返し加算法」と呼ばれる手法で解くことができます。この方法では、数値から末尾の1桁を取り出し、それを2倍した結果を残りの数値に加えるという操作を、数値が2桁になるまで繰り返します。そして最終的に得られた2桁の数値が19で割り切れるかどうかを調べます。
具体的な手順
- 数値が100以上である間(
number // 100が0でない間)、次の処理を繰り返します。last_digit := number mod 10… 末尾の桁を取り出すnumber := floor(number / 10)… 末尾の桁を除去するnumber := number + last_digit * 2… 末尾の桁の2倍を加算する
number mod 19 == 0であればTrueを返します。
この手法により、桁数が多くても19による割り切れ判定を効率的に行えます。
実装例
以下のコードを見ると、処理の流れがより理解しやすくなります。
def solve(number) :
while(number // 100) :
last_digit = number % 10
number //= 10
number += last_digit * 2
return (number % 19 == 0)
number = 86982
if solve(number) :
print("Divisible")
else :
print("Not Divisible")
入力
86982
出力
Divisible
-
Pythonで数値がアキレス数かどうかを判定する方法
ある整数 n が与えられたとき、その数がアキレス数(Achilles number)であるかどうかを判定しましょう。アキレス数とは、「べき乗数(powerful number)」であるにもかかわらず「完全累乗数」ではない数のことです。べき乗数とは、すべての素因数 p に対して p² もその数を割り切るような数 N を指します。一方、完全累乗数とは、mk(k ≥ 2)の形で表される数(例:平方数、立方数など)です。なお、アキレス数という名前はギリシャ神話の英雄アキレスにちなんだもので、「強力でありながら完全ではない」という「アキレスのかかと」の故事に由来しています。アキレス数の例としては、72、
-
【Python入門】数値が素数かどうかを判定するプログラムの書き方
この記事では、ユーザーが入力した数値(1より大きい整数)が素数かどうかを判定するPythonプログラムを紹介します。サンプルコードと実行結果、処理の流れを丁寧に解説しているので、Python初心者の方でも理解しやすい内容になっています。素数とは?素数とは、1より大きい正の整数のうち、約数が1とその数自身の2つしか存在しない数のことです。たとえば、2・3・5・7・11などは約数が1と自分自身だけであるため素数です。一方、4や6のように1と自分自身以外の約数を持つ数は「合成数」と呼ばれます。素数判定プログラムのサンプルコード# 入力された数値が素数かどうかを判定するPythonプログラム # ユ