問題文

解答例1

def is_prime(x):
  if x < 2:
    return False
  if x == 2:
    return True
  if x % 2 == 0:
    return False

  a = 3
  while a**2 <= x:
    if x % a == 0:
      return False
    a = a + 2

  return True

x = int(input('値を入力してください: '))
if is_prime(x):
  print('素数です')
else:
  print('素数ではありません')

解答例2

def is_prime(n):
    sq = int(n ** .5)
    for d in range(2, sq+1):
        if n % d == 0:
            return 0
    return n > 1

n = int(input('値を入力してください: '))
print(f"{n}は素数" + ('です' if is_prime(n) else 'ではありません'))

解答例3
実質的に素数列挙であり相当に非効率的。計算量は大きく見積もって O(n^(1.5)/log(n)) 。解答例1・2の O(√n) に大きく劣る。

a = 代入する値
primes = [2]
is_prime = False

if a < 2:
    pass
elif a % 1 != 0:
    pass
elif a == 2:
    is_prime = True
elif a % 2 == 0:
    pass
else:
    for x in range(3, a+1, 2):
        for p in primes:
            if p**2 > x:
                break
            if x % p == 0:
                x = 0
                break
        if x:
            primes.append(x)
    
    if a in primes:
        is_prime = True
        
if is_prime:
    print("素数である")
else:
    print("素数ではない")

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS