def is_factor_R_10_n(p): """测试p是否是R(10**n) {n 为自然数}的因子 >>> is_factor_R_10_n(3) False >>> is_factor_R_10_n(11) True >>> is_factor_R_10_n(17) True >>> is_factor_R_10_n(41) True >>> is_factor_R_10_n(73) True """ print p # g(k) = sum(a[k] ** i for i in range(10)) % p # a[0] = 10 # a[n] = 10 ** (10 ** n) # a[n + 1] = 10 ** (10 ** (n + 1)) = 10 ** ((10 ** n) * 10) = a[n] ** 10 a = 10 is_cycle = set() while True: if sum(exp_mod(a, i, p) for i in range(10)) % p== 0: return True if a % p in is_cycle: return False is_cycle.add(a % p) a = exp_mod(a, 10, p)
def fg(begin, end, step = 1): assert end > begin assert step in (1, 2) if begin > 100000: a = begin / 100000 begin = begin - a * 100000 end = end - a * 100000 result = 1 if end - begin > 100000: result *= exp_mod(h(_f(range(begin, begin + 100000, step))), (end - begin) / 100000, 100000) return result * h(_f(range(begin, end - (((end - begin) / 100000) * 100000), step)))
def _primality_test(n): x = randint(2, n - 1) k = 0 q = n - 1 while q % 2 == 0: k += 1 q /= 2 j = 0 y = exp_mod(x, q, n) while j < k: if y == n - 1 or (y == 1 and j == 0): return True if y == 1 and j > 0: return False j += 1 y = (y * y) % n return y == 1
def f(n): """ >>> f(9) 36288 >>> f(10) 36288 >>> f(20) 17664 >>> f(25) 85984 >>> f(50) 60512 """ if n <= 10 ** 5: return h(range(1, n + 1)) elif n % 10 == 0: x,y = exp_mod(V, (n / (5 ** 5)), 100000) , f(n / 5) print x,y return g(x * y)