見出し画像

GCI (東大オンライン講義)第二回 演習問題 【解説付き】

こんにちは!今回は、現在僕が受講している、GCI(東京大学オンラインクラス)で出題された演習問題について、解いていきたいと思います!
初心者の方でも、解けるものとなっているので是非挑戦してみてください!
問題は全2問です。自信がない方は、下のリンクから練習問題を先に挑戦してみてください!

1.4 総合問題

(1) 与えられた自然数nに対して、それが素数であればTrue、合成数であればFalseを返す関数is_primeを定義してください。

def is_prime(n): #define is_prime 
   if n > 1: #when n>1
       for i in range(2, n): 
           if n%i==0: #if it can divide by other number
               print("False")
               break #finish this loop
       else:
           print("True")
   else:
       print("False")

#Ex)
is_prime(101)

>>>True

~解説~

・素数の定義の確認
素数 (prime number) とは、1 より大きい自然数で、正の約数が 1 と自分自身のみであるもののことである。正の約数の個数が 2 である自然数と言い換えることもできる。1 より大きい自然数で素数でないものは合成数と呼ばれる。(wikipedia参考)

素数の定義より、1とその数以外で割れなければ素数なのでfor文を用いて2~n(その数)まで割れる数がないか調べる。あったらfalseを返すといった感じでコードを書く。最初のelseはfor文の中に入れると2を入力したときErrorになるので、入れないように気を付ける。あとは、elseで1だった時にFalseを返すように条件分岐すればよい。

(2) 与えられた自然数n以下の素数をリストとして返す関数primesを定義してください。(1)を利用しても構いません。

def is_prime(n): #using(1)
   if n > 1:
       for i in range(2, n):
           if n%i==0:
               jg = "False"
               break
       else:
           jg = "True"
   else:
       jg = "False"
   return jg
       
#(2)
def primes(n): 
   x = [] #Make Empty list
   for i in range(1, n+1):
       if is_prime(i)=="False":
           pass
       else:
           x.append(i)
   print(x)

(1)の部分を少し変更しました。printは表示するだけなので、戻り値を返すreturnに変えました。#(2)からは、(1)を用いて1~その値までfor文で繰り返し、(1)がTrueだったらlistに追加する、という感じで書きました。
ちなみにpassは何もしない時に使います。

~最後に~

最後まで読んでいただき、ありがとうございます。質問や間違えているところがあればコメントで教えていただければ嬉しいです。アドバイスなどもしていただければありがたいです。これからも投稿していこうと思っているのでよろしくお願いします!

↓ 練習問題はこちらです、是非見てください!


この記事が気に入ったらサポートをしてみませんか?