from lib import str_to_int def part_1(data): fa = 16807 fb = 48271 m = 2147483647 xs = [] for line in data.splitlines(): xs.append(str_to_int(line)) a, b = xs c = 0 for _ in range(40_000_000): a = (a * fa) % m b = (b * fb) % m if (a & 0xffff) == (b & 0xffff): c += 1 print(c) def gen(a, f, m, d): while True: a = (a * f) % m if a % d == 0: yield a def part_2(data): fa = 16807 fb = 48271 m = 2147483647 xs = [] for line in data.splitlines(): xs.append(str_to_int(line)) a, b = xs xs = gen(a, fa, m, 4) ys = gen(b, fb, m, 8) c = 0 for _ in range(5_000_000): a = next(xs) b = next(ys) if (a & 0xffff) == (b & 0xffff): c += 1 print(c) def main(): data = open(0).read().strip() part_1(data) part_2(data) if __name__ == "__main__": main()