ひまlab

ひまな時になんか書く。

一年に素数は何個ある??

初めに

きっかけは、今日見たツイート

  • 数人が似たツイートしていて、誰が最初にツイートしたのか分からなかったので文章のみコピってます
 
    一般人「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)
      • 最初に思いついたのが、この形式だったので・・

次に、調べる用のコードを書く

    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))

実行してみる

f:id:kanjin:20130309232301p:plain

今回の条件では、一年に素数は67個ある!

  • これ見た時、思ったより多いなって思いました

最後に

酔った勢いで書いた
反省している

読み返すとコードがごちゃごちゃしてるので、次はもっとスッキリしたコードを書くように頑張ろう
でも、結構楽しめたのでよかった