一年に素数は何個ある??
初めに
きっかけは、今日見たツイート
- 数人が似たツイートしていて、誰が最初にツイートしたのか分からなかったので文章のみコピってます
一般人「3月9日だー!卒業シーズンだしレミオロメンだねー」 ボカロ厨「ミクの日!」 バンギャ「SuGの日!」 ガンダム「ザクの日」 東工大生「そ、素数…」 _人人人人人人人_ > 突然の素数 <  ̄Y^Y^Y^Y^Y^Y ̄
これを見た時、3月9日が素数って言うのがよく分からなかった。
3 + 9が素数?
それはない・・
月と日をくっつけた数 → 39が素数?
それっぽいけど、違う
そんなことを考えていると別の疑問が湧いた
あ、でも月と日をくっつけた数が、素数って一年に何個あるんだろう??
調べてみた
まずは、条件を考える
- 範囲は、2012年の1年間(1月1日から12月31日)
- 閏年だったので・・
- 月と日のくっつけ方は、3月9日が39になるようにくっ付ける
- 日の頭が0になる時は、0をとるようにする(3月9日 ≠ 309)
- 最初に思いついたのが、この形式だったので・・
- 日の頭が0になる時は、0をとるようにする(3月9日 ≠ 309)
次に、調べる用のコードを書く
def is_prime(number): if number % 2 == 0 or number % 3 == 0: return False for x in range(5, int(number ** 0.5) + 1): if number % x == 0: return False return True import time from datetime import date A_DAY = date.resolution prime_numbers = [ ] other_numbers = [ ] day = date(2012, 1, 1) while day <= date(2012, 12, 31): # 日付の先頭から0を削る 例: 1/1 → 11 _day = int(str(day.month) + str(day.day)) if is_prime(_day): prime_numbers.append(_day) else: other_numbers.append(_day) day += A_DAY assert len(prime_numbers) + len(other_numbers) == 366 print (prime_numbers) print ('size = %s' % len(prime_numbers))
実行してみる
今回の条件では、一年に素数は67個ある!
- これ見た時、思ったより多いなって思いました
最後に
酔った勢いで書いた
反省している
読み返すとコードがごちゃごちゃしてるので、次はもっとスッキリしたコードを書くように頑張ろう
でも、結構楽しめたのでよかった