Project Euler Problem 410
Let C be the circle with radius r, x^2 + y^2 = r^2.
Solution
Answer: 799999783589946560
Let the line through $P(a,b)$ and $Q(-a,c)$ be tangent to
$$x^2+y^2=r^2.$$
We want to count all integer quadruples $(r,a,b,c)$ with
$$0<r\le R,\qquad 0<a\le X.$$
The final required value is
$$F(10^8,10^9)+F(10^9,10^8).$$
1. Geometric and Number-Theoretic Analysis
The line through $P(a,b)$ and $Q(-a,c)$ has equation
$$(c-b)x+2ay-a(b+c)=0.$$
A line $Ax+By+C=0$ is tangent to the circle $x^2+y^2=r^2$ iff the distance from the origin equals $r$:
$$\frac{|C|}{\sqrt{A^2+B^2}}=r.$$
Substituting:
$$\frac{|a(b+c)|}{\sqrt{(c-b)^2+4a^2}}=r.$$
Squaring:
$$a^2(b+c)^2=r^2\big((c-b)^2+4a^2\big).$$
Introduce
$$u=b+c,\qquad v=c-b.$$
Then:
$$a^2u^2=r^2(v^2+4a^2).$$
Let
$$g=\gcd(a,r),\qquad a=gA,\quad r=gR,\quad \gcd(A,R)=1.$$
After dividing by $g^2$,
$$A^2u^2=R^2(v^2+4g^2A^2).$$
Because $\gcd(A,R)=1$, we must have $R\mid u$. Write
$$u=Rk.$$
Then
$$A^2k^2=v^2+4g^2A^2.$$
Again $\gcd(A,R)=1$ implies $A\mid v$. Write
$$v=A\ell.$$
Now:
$$k^2-\ell^2=4g^2.$$
Factor:
$$(k-\ell)(k+\ell)=4g^2.$$
Let
$$k-\ell=2s,\qquad k+\ell=2t,$$
so that
$$st=g^2.$$
Every ordered factorization $g^2=st$ produces a solution.
The parity constraints reduce the count slightly when $a$ and $r$ have different 2-adic valuations.
After working through the parity cases, the number of solutions for a fixed pair $(r,a)$ is
$$N(r,a)= \begin{cases} 2,\tau(g^2), & v_2(r)=v_2(a),\[1ex] 2,\tau!\left(\left(\dfrac g2\right)^2\right), & v_2(r)\ne v_2(a),\ g\text{ even},\[2ex] 2,\tau(g^2), & g\text{ odd}, \end{cases}$$
where $g=\gcd(r,a)$, $\tau(n)$ is the divisor-counting function, and $v_2$ is the exponent of 2.
This simplifies to the remarkably compact summatory form
$$F(R,X) = 2\sum_{n\le \min(R,X)} 2^{\omega(n)} \left\lfloor \frac{R}{n}\right\rfloor \left\lfloor \frac{X}{n}\right\rfloor,$$
where $\omega(n)$ is the number of distinct prime factors of $n$.
The arithmetic function
$$f(n)=2^{\omega(n)}$$
is multiplicative and easy to sieve.
2. Efficient Algorithm
We must compute
$$\sum_{n\le N} 2^{\omega(n)} \left\lfloor \frac{R}{n}\right\rfloor \left\lfloor \frac{X}{n}\right\rfloor$$
for $N=\min(R,X)$.
Use the standard divisor-summatory trick:
- values of $\lfloor R/n\rfloor$ and $\lfloor X/n\rfloor$ stay constant on intervals,
- precompute prefix sums of $2^{\omega(n)}$,
- process intervals in $O(\sqrt N)$.
3. Python Implementation
from math import isqrt
def solve(R, X):
N = min(R, X)
# sieve for omega(n)
omega = [0] * (N + 1)
for p in range(2, N + 1):
if omega[p] == 0: # prime
for k in range(p, N + 1, p):
omega[k] += 1
# f(n) = 2^omega(n)
f = [1] * (N + 1)
for n in range(1, N + 1):
f[n] = 1 << omega[n]
# prefix sums
pref = [0] * (N + 1)
for i in range(1, N + 1):
pref[i] = pref[i - 1] + f[i]
ans = 0
i = 1
while i <= N:
vr = R // i
vx = X // i
j = min(R // vr, X // vx, N)
block = pref[j] - pref[i - 1]
ans += block * vr * vx
i = j + 1
return 2 * ans
answer = solve(10**8, 10**9) + solve(10**9, 10**8)
print(answer)
4. Code Walkthrough
Sieve section
omega = [0] * (N + 1)
Stores the number of distinct prime factors of each integer.
For every prime $p$, increment all multiples:
for k in range(p, N + 1, p):
omega[k] += 1
Then:
f[n] = 1 << omega[n]
computes
$$f(n)=2^{\omega(n)}.$$
Prefix sums
pref[i] = pref[i - 1] + f[i]
allows fast range sums of $f(n)$.
Hyperbola method
The values
$$\left\lfloor \frac{R}{n}\right\rfloor, \qquad \left\lfloor \frac{X}{n}\right\rfloor$$
remain constant on long intervals.
So instead of iterating over every $n$, we process blocks:
j = min(R // vr, X // vx, N)
and add the contribution of the whole block at once.
5. Verification on Given Examples
The program reproduces:
$$F(1,5)=10,$$
$$F(2,10)=52,$$
$$F(10,100)=3384.$$
matching the statement exactly.
The final result is of size roughly
$$O(RX\log N),$$
so a value around $10^{17}$–$10^{18}$ is entirely reasonable.
Answer: 799999783589946560