ソースを参照

Exploring Pascal's triangle

Exits with MemoryError
Adel Qalieh 13 年 前
コミット
831a8938f4
1 ファイル変更70 行追加0 行削除
  1. 70 0
      211.py

+ 70 - 0
211.py

@@ -0,0 +1,70 @@
+from math import sqrt
+
+def appendEs2Sequences(sequences,es):
+	result=[]
+	if not sequences:
+		for e in es:
+			result.append([e])
+	else:
+		for e in es:
+			result+=[seq+[e] for seq in sequences]
+	return result
+
+
+def cartesianproduct(lists):
+	return reduce(appendEs2Sequences,lists,[])
+
+def primefactors(n):
+	i = 2
+	while i<=sqrt(n):
+		if n%i==0:
+			l = primefactors(n/i)
+			l.append(i)
+			return l
+		i+=1
+	return [n]
+
+def factorGenerator(n):
+	p = primefactors(n)
+	factors={}
+	for p1 in p:
+		try:
+			factors[p1]+=1
+		except KeyError:
+			factors[p1]=1
+	return factors
+
+def divisors(n):
+	factors = factorGenerator(n)
+	divisors=[]
+	listexponents=[map(lambda x:k**x,range(0,factors[k]+1)) for k in factors.keys()]
+	listfactors=cartesianproduct(listexponents)
+	for f in listfactors:
+		divisors.append(reduce(lambda x, y: x*y, f, 1))
+	divisors.sort()
+	return divisors
+
+def is_square(apositiveint):
+	x = apositiveint // 2
+	seen = set([x])
+	while x * x != apositiveint:
+		x = (x + (apositiveint // x)) // 2
+		if x in seen: return False
+		seen.add(x)
+	return True
+
+def o2(n):
+	sumsq = 0
+	for factor in divisors(n):
+		sumsq += factor**2
+	return sumsq
+
+def main():
+	divsqsum = 0
+	for i in range(1,64000000):
+		if is_square(o2(i)):
+			divsqsum += o2(i)
+			print o2(i)
+	print divsqsum
+
+main()