def main(): N = 10**8 sq_coprime_sum = np.zeros((N + 1, ), dtype=np.uint32) result_real = np.zeros((N + 1, ), dtype=np.uint32) result_imag = np.zeros((N + 1, ), dtype=np.uint32) print("successfully allocated") sq_coprime_sum[2] = 2 # 1*1 + 1*1 = 2 for i in range(1, int(sqrt(N)) + 1): for j in range(i + 1, int(sqrt(N)) + 1): squared_sum = i * i + j * j if squared_sum > N: break if gcd(i, j) == 1: sq_coprime_sum[squared_sum] += 2 * (i + j) # print(i, j, squared_sum) # print(sq_coprime_sum) print("sq_coprime_sum computed by", time() - starting_time) for i in range(1, N + 1): for j in range(i, N + 1, i): result_real[j] += i print("real part computed by", time() - starting_time) for i in range(1, N + 1): if sq_coprime_sum[i] == 0: continue for j in range(i, N + 1, i): result_imag[j] += sq_coprime_sum[i] * result_real[j // i] print("complex part computed by", time() - starting_time) # print(list(zip(result_real, result_imag))) print(sum(map(int, result_real)) + sum(map(int, result_imag)))
def main(): N = 10 ** 8 sq_coprime_sum = np.zeros((N + 1,), dtype=np.uint32) result_real = np.zeros((N + 1,), dtype=np.uint32) result_imag = np.zeros((N + 1,), dtype=np.uint32) print("successfully allocated") sq_coprime_sum[2] = 2 # 1*1 + 1*1 = 2 for i in range(1, int(sqrt(N)) + 1): for j in range(i + 1, int(sqrt(N)) + 1): squared_sum = i * i + j * j if squared_sum > N: break if gcd(i, j) == 1: sq_coprime_sum[squared_sum] += 2 * (i + j) # print(i, j, squared_sum) # print(sq_coprime_sum) print("sq_coprime_sum computed by", time() - starting_time) for i in range(1, N + 1): for j in range(i, N + 1, i): result_real[j] += i print("real part computed by", time() - starting_time) for i in range(1, N + 1): if sq_coprime_sum[i] == 0: continue for j in range(i, N + 1, i): result_imag[j] += sq_coprime_sum[i] * result_real[j // i] print("complex part computed by", time() - starting_time) # print(list(zip(result_real, result_imag))) print(sum(map(int, result_real)) + sum(map(int, result_imag)))
def terminate(numerator, denominator): left = denominator // gcd(numerator, denominator) while left % 2 == 0: left //= 2 while left % 5 == 0: left //= 5 if left == 1: # terminate return -1 else: # non-terminate return 1
def parametrized(): prog_sq = [] for b in range(2, CBRT_N): for a in range(1, b): if a * a * a * b * b > N: break if gcd(a, b) != 1: continue for c in range(1, SQRT_N): candidate = c * a * a + c * c * a * b * b * b if candidate > N: break if is_square(candidate): prog_sq.append(candidate) print(candidate, c * a * b) print(sum(prog_sq))
def parametrized(): prog_sq = [] for b in range(2, CBRT_N): for a in range(1, b): if a * a * a * b * b > N: break if gcd(a, b) != 1: continue for c in range(1, SQRT_N): candidate = c * a * a + c * c * a * b * b * b if candidate > N: break if is_square(candidate): prog_sq.append(candidate) print(candidate, c * a * b) print(sum(prog_sq))
def _next_continued_fraction(x, y, z=1): """ (√x + y) reciprocal z * (√x - y) z * (√x - y) -------- =============> --------------------- = ------------ z (√x + y) * (√x - y) x - y**2 """ assert x > y * y int_part = int(z * (sqrt(x) - y) / (x - y**2)) common_divisor = gcd(z, x - y**2) denominator = (x - y**2) // common_divisor y = -y - int_part * denominator assert z == common_divisor, \ 'x={}, y={}, z={}'.format(x, y, z) return int_part, x, y, denominator
def _next_continued_fraction(x, y, z=1): """ (√x + y) reciprocal z * (√x - y) z * (√x - y) -------- =============> --------------------- = ------------ z (√x + y) * (√x - y) x - y**2 """ assert x > y * y int_part = int(z * (sqrt(x) - y) / (x - y ** 2)) common_divisor = gcd(z, x - y ** 2) denominator = (x - y ** 2) // common_divisor y = -y - int_part * denominator assert z == common_divisor, \ 'x={}, y={}, z={}'.format(x, y, z) return int_part, x, y, denominator
def least_common_multipler(S): lcm = [1] for s in range(2, S + 1): lcm.append(lcm[-1] * s // gcd(lcm[-1], s)) return lcm
# project euler 141: Investigating progressive numbers, # n, which are also square """ perfect_sq = d * q + r d * d == q * r perfect_sq = r + d ** 3 / r (r < d) 3 2 d n = r + ----- r parametrize gcd(a, b) = 1, b > a 2 r = c * a d = c * a * b 2 2 2 3 n = c * a + c * a * b """ from __future__ import division from math import sqrt from mathutil import gcd N = 10**10 # not feasible for real problem size, see cpp version SQRT_N = int(sqrt(N)) CBRT_N = int(N**(1 / 3))
# project euler 141: Investigating progressive numbers, # n, which are also square """ perfect_sq = d * q + r d * d == q * r perfect_sq = r + d ** 3 / r (r < d) 3 2 d n = r + ----- r parametrize gcd(a, b) = 1, b > a 2 r = c * a d = c * a * b 2 2 2 3 n = c * a + c * a * b """ from __future__ import division from math import sqrt from mathutil import gcd N = 10 ** 10 # not feasible for real problem size, see cpp version