#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 件のコメント:
コメントを投稿