Advertisement
UF6

Problem 5

UF6
Feb 28th, 2016
283
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.26 KB | None | 0 0
  1. from fractions import Fraction
  2. import sys
  3.  
  4. class QuadraticInteger():
  5.     def __init__(self, a, b):
  6.         self.a = a
  7.         self.b = b
  8.    
  9.     def add(self, other):
  10.         return QuadraticInteger(self.a + other.a, self.b + other.b)
  11.        
  12.     def subtract(self, other):
  13.         return QuadraticInteger(self.a - other.a, self.b - other.b)
  14.  
  15.     def multiply(self, other):
  16.         a = self.a * other.a + 2 * self.b * other.b
  17.         b = self.a * other.b + self.b * other.a
  18.         return QuadraticInteger(a, b)
  19.    
  20.     def inverse(self):
  21.         d = self.a**2 - 2*self.b**2
  22.         return QuadraticInteger(Fraction(self.a, d), Fraction(-self.b, d))
  23.    
  24.     def power(self, n):
  25.         if n == 0:
  26.             return QuadraticInteger(1, 0)
  27.         if n < 0:
  28.             return self.power(-n).inverse()
  29.         rv = QuadraticInteger(self.a, self.b)
  30.         for i in range(1, n):
  31.             rv = rv.multiply(self)
  32.         return rv
  33.    
  34.     def __str__(self):
  35.         return str(self.a) + ' + ' + str(self.b) + ' Sqrt[2]'
  36.    
  37.     def __repr__(self):
  38.         return str(self.a) + ' + ' + str(self.b) + ' Sqrt[2]'
  39.    
  40. class Problem():
  41.     def __init__(self):
  42.         pass
  43.        
  44.     def solve(self):
  45.         self.solve_by_conjecture()
  46.  
  47.  
  48.     def solve_by_conjecture(self):
  49.         n_array = []
  50.         c_array = [
  51.             [
  52.                 QuadraticInteger(Fraction(1, 2), Fraction(1, 8)),
  53.                 QuadraticInteger(Fraction(-1, 2), Fraction(1, 8)),
  54.             ],
  55.             [
  56.                 QuadraticInteger(Fraction(1, 2), Fraction(-1, 8)),
  57.                 QuadraticInteger(Fraction(-1, 2), Fraction(-1, 8)),
  58.             ],
  59.         ]
  60.         d = [
  61.             QuadraticInteger(3, 2),
  62.             QuadraticInteger(3, -2)
  63.         ]
  64.         for i in range(50):
  65.             for c in c_array:
  66.                 m = c[0].multiply(d[0].power(i)).subtract(c[1].multiply(d[1].power(i)))
  67.                 assert(m.b == 0 and m.a.denominator == 1)
  68.                 n = m.a.numerator - 1
  69.                 if n > 0:
  70.                     n_array.append(n)    
  71.         n_array.sort()
  72.         print(sum(n_array[:40]))
  73.    
  74. def main():
  75.     problem = Problem()
  76.     problem.solve()
  77.    
  78. if __name__ == '__main__':
  79.     sys.exit(main())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement