LoginSignup
1
1

More than 5 years have passed since last update.

Project Euler 47

Posted at

問題

それぞれ2つの異なる素因数を持つ連続する2つの数が最初に現れるのは:

14 = 2 × 7
15 = 3 × 5

それぞれ3つの異なる素因数を持つ連続する3つの数が最初に現れるのは:

644 = 2**2 × 7 × 23
645 = 3 × 5 × 43
646 = 2 × 17 × 19

最初に現れるそれぞれ4つの異なる素因数を持つ連続する4つの数を求めよ. その最初の数はいくつか?
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2047

回答

指定された数maxまでの各数の約数の素数のリストを作る関数get_prime_factor_listを作った。この関数は、たとえば、次のようなリストを作成する。

6→[2,3]
8→[2]
12→[2,3]

これを使って、上記リストの要素数が4以上となるような数が4連続する最初の数を探した。

# coding: utf-8
import math
from mymath import get_prime_boolean

def get_prime_factor_list(max):
    bool = get_prime_boolean(max)
    ret = [ [] for i in range(max+1)] 
    for p in range(max+1):
        if bool[p]:
            for j in range(p*2,max,p):
                ret[j] += [p]
    return ret

def main():
    # TPF stands for a threshold of number of prime factors.
    # TCI stands for a threshold of number of concecutive integers
    MAX, TPF, TCI =10**6, 4, 4
    prime_factor_list = get_prime_factor_list(MAX)
    ans = []
    for i in range(MAX):
        if len(prime_factor_list[i]) >= TPF:
            ans.append(i)
            if len(ans) == TCI:
                break
        else:
            ans = []

    print ans[0]

main()
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1