1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| import math from math import gcd, log
def is_finite_decimal(N, k): """ 判断 (N/k)^k 是否是有限小数 """ g = gcd(N, k) denom = k // g
while denom % 2 == 0: denom //= 2 while denom % 5 == 0: denom //= 5
return denom == 1
def best_k(N): """ 找到使 (N/k)^k 最大的整数 k 使用 log 比较 """ best_val = -1e100 best_k = 1
for k in range(1, N + 1): val = k * (log(N) - log(k)) if val > best_val: best_val = val best_k = k
return best_k
def compute_sum_D(limit=10000): total = 0
for N in range(5, limit + 1): k = best_k(N)
if is_finite_decimal(N, k): total -= N else: total += N
return total
if __name__ == "__main__": print(compute_sum_D(10000))
|