2014年3月6日木曜日

#12(1.3 sec): http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2012
primes=[2]
def genPrime(n=3):
    while(True):
        for p in primes:
            if n%p==0: break
        else: primes.append(n); yield n 
        n+=2

def genTriNum(t=0, i=1):
    while(True):
         t+=i; i+=1; yield t 

def getFactDic(t):
    d = {}
    for p in primes:
        if t%p==0:
            d[p]=0
            while t%p==0:
                d[p]+=1; t/=p
        if t==1: return d 
        elif p == primes[-1]: pg.__next__()

def getDivNum(d):
    prod = 1 
    for v in d.values():
           prod *= (v+1)
    return prod

pg = genPrime()
tg = genTriNum()
while(True):
    t = tg.__next__()
    d = getFactDic(t)
    n = getDivNum(d)
    if n >= 500:
        print(t, d, getDivNum(d))
        break

0 件のコメント:

コメントを投稿