OFFSET
1,1
COMMENTS
The numbers x, y and z form a sigma*psi-quadratic triple.
LINKS
S. I. Dimitrov, On σψ-quadratic k-tuples and related generalizations, hal-05303937, 2025.
EXAMPLE
(293760, 369792, 774144) is such a triple because sigma(293760) * psi(293760) = sigma(369792) * psi(369792) = 1101600 * 746496 = 293760^2 + 369792^2 + 774144^2.
PROG
(Python)
from sympy import divisors, factorint
from functools import lru_cache
from multiprocessing import Pool, cpu_count
from collections import defaultdict
from itertools import combinations_with_replacement
from math import isqrt
from fractions import Fraction
@lru_cache(maxsize=None)
def sigma(n: int) -> int:
return sum(divisors(n))
@lru_cache(maxsize=None)
def dedekind_psi(n: int) -> Fraction:
factors = factorint(n)
result = Fraction(n)
for p in factors:
result *= Fraction(p + 1, p)
return result
def process_n(n):
return n, sigma(n) * dedekind_psi(n)
def find_xyz_triplets(start, end):
with Pool(cpu_count()) as pool:
results = pool.map(process_n, range(start, end + 1))
groups = defaultdict(list)
for n, f in results:
groups[f].append(n)
triplets = []
for fval, nums in groups.items():
for x, y in combinations_with_replacement(nums, 2):
rhs_frac = fval - x*x - y*y
if rhs_frac.denominator == 1 and rhs_frac.numerator >= 0:
z = isqrt(rhs_frac.numerator)
if z*z == rhs_frac.numerator:
triplets.append((x, y, z))
return triplets
if __name__ == "__main__":
start = 1
end = 1000000
xyz_triplets = find_xyz_triplets(start, end)
for triplet in xyz_triplets:
print(triplet)
CROSSREFS
KEYWORD
nonn,hard,more
AUTHOR
S. I. Dimitrov, May 05 2026
STATUS
approved
