n = 1
for i in range(1,1001):
n*=2
print(sum(map(int, list(str(n)))))
2014年3月7日金曜日
時刻:
22:43:00
#15: http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2015
print(4*39*37*35*11*31*29*3*23)${}_{40}\mathrm{C}_{20}$=4*39*37*35*11*31*29*3*23 ってとこまで手で計算。私の感覚だと、最後の掛け算を計算機にさせても全体としては「手で解いた」と言って良いと思うのだがどうか。
時刻:
0:06:00
#14(2.1 sec): http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2014
#Python 3.3
dic = {1:1}
def collatzSeqNum(n):
if n in dic: return dic[n]
if n%2==0: dic[n] = 1 + collatzSeqNum(int(n/2))
else: dic[n] = 1 + collatzSeqNum(3*n+1)
return dic[n]
res, maxSeq = 1, 1
for i in range(2, 1000000):
t = collatzSeqNum(i)
if t > maxSeq: res = i; maxSeq = t
print(res, maxSeq)
2014年3月6日木曜日
時刻:
22:48:00
#13(0.024 sec): http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2013
int だの long だのと気にする必要のある人たちがかわいそうになるレベル。
int だの long だのと気にする必要のある人たちがかわいそうになるレベル。
# python3.3
f = open('input.dat')
ls = f.readlines()
f.close()
sum = 0
for l in ls:
sum += int(l)
print(str(sum)[0:10])
時刻:
22:04:00
#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
2014年3月5日水曜日
時刻:
23:17:00
#11(0.15 sec): http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2011
こういう問題は嫌いだな。
こういう問題は嫌いだな。
import numpy
N=20
def l2r(ls):
cl = []
for l in ls:
for i in range(0, N-3):
if "00" in l[i:i+4]: break
else: cl.append(l[i]*l[i+1]*l[i+2]*l[i+3])
return max(cl)
def tl2br(ls):
cl = []
for l in range(0, N-3):
for c in range(0, N-3):
t = [ls[l+i, c+i] for i in range(0, 4)]
if "00" in t: break
else: cl.append(t[0]*t[1]*t[2]*t[3])
return max(cl)
def tr2bl(ls):
cl = []
for l in range(0, N-3):
for c in range(3, N):
t = [ls[l+i, c-i] for i in range(0, 4)]
if "00" in t: break
else: cl.append(t[0]*t[1]*t[2]*t[3])
return max(cl)
ls = numpy.loadtxt('input.dat', dtype='int')
candidates = [l2r(ls), l2r(ls.T), tl2br(ls), tr2bl(ls)]
print(max(candidates))
2014年3月4日火曜日
時刻:
23:53:00
#10(6.5 sec): http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2010
def calc(N):
sum = 2
primes = [2]
for i in range(3, N):
isPrime = True
for p in primes:
if i%p==0: isPrime = False; break
elif p * p > i: break
if isPrime: primes.append(i); sum+=i
return sum
print(calc(2000000))
時刻:
23:40:00
#9(0.10 sec). http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%209
def calc(c):
aPlusB = 1000 - c
c2 = c*c
for b in range(1, aPlusB):
a = aPlusB - b
if a < b: break
elif a + b + c != 1000: break
elif 2*a*b >= c2: break
elif a*a + b*b == c2: print(a, b, c)
for i in range(1,999):
calc(i)
時刻:
23:06:00
#8(0.043 sec): http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%208
s = "731671765313306249192251196744265747423553491949349698352031277450632623957
83180169848018694788518438586156078911294949545950173795833195285320880551112540
69874715852386305071569329096329522744304355766896648950445244523161731856403098
71112172238311362229893423380308135336276614282806444486645238749303589072962904
91560440772390713810515859307960866701724271218839987979087922749219016997208880
93776657273330010533678812202354218097512545405947522435258490771167055601360483
95864467063244157221553975369781797784617406495514929086256932197846862248283972
24137565705605749026140797296865241453510047482166370484403199890008895243450658
54122758866688116427171479924442928230863465674813919123162824586178664583591245
66529476545682848912883142607690042242190226710556263211111093705442175069416589
60408071984038509624554443629812309878799272442849091888458015616609791913387549
92005240636899125607176060588611646710940507754100225698315520005593572972571636
269561882670428252483600823257530420752963450"
def splt():
return [e for e in s.split('0') if len(e) > 4]
def searchLocal(l):
ll = []
n = len(l)-4
for i in range(0, n):
ll.append("".join(sorted(list(l[i:i+5]), reverse=True)))
return max(ll)
if __name__ == '__main__':
l0 = splt()
candidates = []
for l in l0:
candidates.append(searchLocal(l))
max = max(candidates)
res = 1
for s in max:
res *= int(s)
print(res)
時刻:
22:23:00
7問目(4.6 sec): http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%207
def calc(N):
primeList = [2]
n = 1
i = 3
while(True):
for p in primeList:
if p * p > i: pass
elif i % p == 0: break
else:
primeList.append(i)
n += 1
print(n, i)
if n > N: break
i += 1
calc(10001)
登録:
投稿 (Atom)