Project Euler #429: Sum of squares of unitary divisors

A unitary divisor $d$ of a number $n$ is a divisor of $n$ that has the property $gcd(d, \frac n d) = 1$.

The unitary divisors of $4! = 24$ are $1, 3, 8$ and $24$.

The sum of their squares is $12 + 32 + 82 + 242 = 650$.

Let $S(n)$ represent the sum of the squares of the unitary divisors of $n$. Thus $S(4!)=650$.

Find $S(100 000 000!) \mod 1 000 000 009$.

For clarity, let’s denote $n=10^8$ and $N=n!=10^8!$

Observation #1🔗

$N$ is huge. It has ~$750$ million digits. Computing it is out of the question.

Observation #2🔗

We are looking for coprime divisors of some integer $N$. This means they are not allowed to have any prime factors in common. Moreover, their product is $N$ so together they must share exactly all factors of $N$.

If $d$ and $\frac N d$ are two such divisors, and $N$ can be factorized as $\prod p_i^{a_i}$, then every $p_i^{a_i}$ must belong to either $d$ or $\frac N d$. It can not be subdivided as that would imply $gcd(d, \frac N d)$ is at least $p_i$.

$N$ contains every prime factor in the interval $[2, n]$. There are $\pi(n) = 5761455$ such primes (A000720). Each of them can belong to either $d$ or $\frac n d$ so we can generate $2^{5761455}$ such pairs of divisors. Again, not feasible.

Observation #3🔗

The sum of $k$-th powers of unitary divisors of $n$ is denoted by $\sigma^*_k(n)$. Wikipedia doesn’t help much but MathWorld has a useful formula for generating this function:

$\sigma^*_k(\prod p_i^{a_i}) = \prod (1+p_i^ {k \cdot a_i}) $

Using this notation, the answer is $\sigma^*_2(N)$, which can be computed in $O(\pi(n))$ – completely reasonable.

So we need a few things:

  • All primes up to $n$.
  • The factorization of $N$ using said primes. Since $N=n!$, we can compute the factorization of every integer up to $n$ and merge the results.
  • The computation of $\sigma^*_2(N)$ using said factorization.

A final implementation detail: the intermediate results can become significantly large. It is important to compute them modulo $ 10^9+9 $. Since the exponents $a_i$ can get fairly large too (on the same order of magnitude as $n$), it doesn’t hurt to use fast exponentiation too.

This solution runs in ~1.5min on my machine: 14s generating primes, 70s performing the factorization and <1s computing $\sigma^*_2(N)$.