ID photo of Ciro Santilli taken in 2013 right eyeCiro Santilli OurBigBook logoOurBigBook.com  Sponsor 中国独裁统治 China Dictatorship 新疆改造中心、六四事件、法轮功、郝海东、709大抓捕、2015巴拿马文件 邓家贵、低端人口、西藏骚乱
euler/956.py
#!/usr/bin/env python

'''
By GPT-5.1. Runtime: 0m0.284s on pypy3 3.11.13, Ubuntu 25.10, Lenovo ThinkPad P14s.
'''

from typing import List

MOD = 999_999_001
ROOT = 17

def primes_up_to(N: int) -> List[int]:
    is_prime = [True] * (N + 1)
    is_prime[0] = False
    is_prime[1] = False
    primes: List[int] = []
    for i in range(2, N + 1):
        if is_prime[i]:
            primes.append(i)
            j = i * i
            step = i
            while j <= N:
                is_prime[j] = False
                j += step
    return primes

def exponents_for_star(N: int, primes: List[int]) -> List[int]:
    exps: List[int] = []
    for p in primes:
        vp_in_k = [0] * (N + 1)
        for k in range(1, N + 1):
            x = k
            c = 0
            while x % p == 0:
                x //= p
                c += 1
            vp_in_k[k] = c
        fact_vp = [0] * (N + 1)
        for k in range(1, N + 1):
            fact_vp[k] = fact_vp[k - 1] + vp_in_k[k]
        E = 0
        for k in range(1, N + 1):
            E += (N + 1 - k) * fact_vp[k]
        exps.append(E)
    return exps

def D_star_mod(N: int) -> int:
    primes = primes_up_to(N)
    exps = exponents_for_star(N, primes)
    m = N
    omega = pow(ROOT, (MOD - 1) // m, MOD)
    inv_m = pow(m, MOD - 2, MOD)
    ans = 0
    w = 1
    for _ in range(m):
        prod = 1
        for p, E in zip(primes, exps):
            r = (p * w) % MOD
            if r == 1:
                term = (E + 1) % MOD
            else:
                num = (pow(r, E + 1, MOD) - 1) % MOD
                den = (r - 1) % MOD
                den_inv = pow(den, MOD - 2, MOD)
                term = (num * den_inv) % MOD
            prod = (prod * term) % MOD
        ans = (ans + prod) % MOD
        w = (w * omega) % MOD
    return (ans * inv_m) % MOD

if __name__ == "__main__":
    assert D_star_mod(3) == 21 % MOD
    assert D_star_mod(6) == 6368195719791280 % MOD
    print(D_star_mod(1000))