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

Pythonで数値nがk個の素数の合計として表せるかどうかを判定するプログラム

ある整数 n と個数 k が与えられたとき、「n を k 個の素数の合計として表すことができるかどうか」を判定する問題を考えてみましょう。

例えば、入力が n = 30、k = 3 の場合、30 は「2 + 11 + 17」という3つの素数の合計で表せるため、出力は True になります。

解法のアプローチ

この問題を効率的に解くために、以下の手順に従います。

  • n < 2×k の場合
    • False を返す(最小の素数は2なので、k個の素数の合計の最小値は 2×k になるため)
  • k > 2 の場合
    • True を返す(任意の n ≥ 2k は k 個の素数の合計として必ず表現できることが知られているため)
  • k = 2 の場合
    • n が偶数であれば True を返す(ゴールドバッハ予想により、4以上の偶数は2つの素数の和で表せるとされるため)
    • (n − 2) が素数であれば True を返す(n = (n−2) + 2 と表現できるため)
    • それ以外は False を返す
  • k = 1 の場合
    • n 自体が素数であれば True を返す
  • 上記以外は False を返す

実装例

それでは、実際のコードを見て理解を深めましょう。

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

def solve(n, k):
   if n < k*2:
      return False
  
   if k > 2:
      return True

   if k == 2:
      if n%2 == 0:
         return True

      if isPrime(n-2):
         return True
      return False

   if isPrime(n):
      return True
   return False

n = 30
k = 3
print(solve(n, k))

入力

30, 3

出力

True

このように、素数判定関数 isPrime() と条件分岐を組み合わせることで、n が k 個の素数の合計として表現可能かどうかを簡単に判定できます。

  1. 【Python入門】数値が素数かどうかを判定するプログラムの書き方

    この記事では、ユーザーが入力した数値(1より大きい整数)が素数かどうかを判定するPythonプログラムを紹介します。サンプルコードと実行結果、処理の流れを丁寧に解説しているので、Python初心者の方でも理解しやすい内容になっています。素数とは?素数とは、1より大きい正の整数のうち、約数が1とその数自身の2つしか存在しない数のことです。たとえば、2・3・5・7・11などは約数が1と自分自身だけであるため素数です。一方、4や6のように1と自分自身以外の約数を持つ数は「合成数」と呼ばれます。素数判定プログラムのサンプルコード# 入力された数値が素数かどうかを判定するPythonプログラム # ユ

  2. Pythonで文字列が回文(パリンドローム)かどうかを判定する方法

    文字列が与えられたとき、その文字列が回文(パリンドローム)であるかどうかを判定するのが、本記事の目的です。 回文とは、「madam」「level」「しんぶんし」のように、前から読んでも後ろから読んでも同じになる文字列のことを指します。Pythonでは、スライス記法を使うことで、わずか数行のコードでこの判定を実装できます。 アルゴリズム Step1: 文字列を入力として受け取る。 Step2: スライスを使って文字列を逆順にし、元の文字列と比較する。 Step3: 判定結果を表示する。 ポイント解説:スライスによる文字列の反転 このプログラムの核心は [::-1] というスライス記法です。こ