Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで最初のN個の自然数の積がその合計で割り切れるかを判定する方法

数値 n が与えられたとき、(1×2×…×n) の積が (1+2+…+n) の合計で割り切れるかどうかを判定する問題について解説します。

例えば、入力が num = 5 の場合を考えてみましょう。積は (1×2×3×4×5) = 120、合計は (1+2+3+4+5) = 15 となります。120 は 15 で割り切れるため、出力は True になります。

解法のアプローチ

この問題は、実際に積と合計を計算しなくても、次のシンプルな条件で判定できます。

  • num + 1 が素数である場合 → False を返す
  • それ以外の場合 → True を返す

なぜこの判定でうまくいくのか?

最初の n 個の自然数の積は階乗 n! であり、合計は n(n+1)/2 です。n! には n 以下のすべての整数が因数として含まれているため、合計のうち n の部分は必ず割り切れます。

ところが、n+1 が素数の場合、n! のどの因数にも n+1 は現れないため、全体として割り切れなくなります。逆に n+1 が合成数であれば、その素因数はすべて n 以下に存在するため、積は必ず合計で割り切れます。これがこの判定法の仕組みです。

実装例

以下の Python コードを実行して、動作を確認してみましょう。

def isPrime(num):
    if num > 1:
        for i in range(2, num):
            if num % i == 0:
                return False
        return True
    return False

def solve(num):
    if isPrime(num + 1):
        return False
    return True

num = 5
print(solve(num))

入力

5

出力

True

このように、素数判定と組み合わせることで、大きな n に対しても高速に答えを求めることができます。

  1. 【Python】最初のn個の自然数の立方和を求めるプログラム

    本記事では、与えられた問題文を解決するための解法とアプローチについて詳しく解説します。 問題文 − 入力として n が与えられたとき、級数 1³ + 2³ + 3³ + 4³ + …… + n³ の第 n 項までの和を出力する必要があります。 ここでは、この問題を解決するための2つのアプローチを紹介します。 ループを使用した総当たり(ブルートフォース)アプローチ n 個の数の和に関する数学的な公式を利用した解法 アプローチ1:数値を反復処理して各項の和を計算する この方法では、1から n までの各数値を順番に取り出し、その立方値を累積していくことで合計を求めます。ロジックがシンプルで直感

  2. Pythonで自然数の合計を求める3つの方法【while文・for文・sum関数】

    Pythonでは、自然数の合計を求める方法がいくつかあります。この記事では、whileループ、forループ、そして組み込み関数sum()を使った3つの方法を、具体的なコード例とともにわかりやすく解説します。 方法1:whileループを使う whileループを使用すると、変数iの値を1ずつ増やしながら、その値を累積的に加算していくことができます。以下の例では、最初の10個の自然数(1から10まで)の合計を計算しています。 s,i=0,0 n=10 while i<n: i=i+1 s=s+i print ("sum of first 10 natural num