Arenaからログインできなかった。
今日はなんかArenaでタイムアウトするバグ(ツイッターで同じ事言ってる人がいたのでたぶんそう)が起こってたので過去問ではなくProjectEulerやってました。
ただ、なんとなく過去問より短い時間で解けるという自信からかちょっとやりすぎてしまう・・・
というわけで今日やった分のソースうp
1~101までの二乗の和と和の二乗の差を求めよ
#!/usr/bin/env python #-*- coding:utf-8 -*- def main(): x,y = 0,0; for i in range(1,101): x += i*i print i for i in range(1,101): y += i y = y*y res = x-y if res < 0: res *= -1 print res if __name__ == '__main__': main()
10001番目の素数を求めよ
#!/usr/bin/env python #-*- coding:utf-8 -*- def main(): f = range(2,200000) i = 0 while True: for j in f: if j == f[i]: continue elif j%f[i]==0: f.remove(j) i += 1 if i >= len(f): break res = f[10000] print res, " ", f[2] if __name__ == '__main__': main()
与えられた1000桁の数字のある5つの連続した数の積のうち最大値を求めよ。
#!/usr/bin/env python #-*- coding:utf-8 -*- def main(): num = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450" i = 0 l = [] while i < 1000: if num[i] == '0': i += 1 continue if num[i+1] == '0': i += 2 continue if num[i+2] == '0': i += 3 continue if num[i+3] == '0': i += 4 continue if num[i+4] == '0': i += 5 continue l.append(int(num[i])*int(num[i+1])*int(num[i+2])*int(num[i+3])*int(num[i+4])) i += 1 l.sort() res = l[-1] print res if __name__ == '__main__': main()
外周が1000になる直角三角形をみつけよ
#!/usr/bin/env python #-*- coding:utf-8 -*- from math import pow def main(): a = range(1,333) b = range(2,500) c = range(3,998) res = 1 for i in a: for j in b: for k in c: if i < j < k: if i < j < k and pow(i,2)+pow(j,2)==pow(k,2) and i+j+k==1000: res = i*j*k print i, " ", j, " ", k break if res != 1: break if res != 1: break print res if __name__ == '__main__': main()
どうもProjectEulerの問題解いてると、真正面からぶつかったほうが一番答えが出やすい気がするのですが・・・
効率的なものを書いたほうがいいんですかね?
p.s.今日のCodeforcesは参加するか迷っております。