My python script for checking the numbers is below. It checks all square-free numbers below ten million in a few minutes. Checking all square free numbers below one hundred million would take hours. My computer is unable to check for all square-free numbers below one billion due to a lack of memory. I believe the sieve algorithm is the cause. An iterative brute-force method would be much slower but shouldn't have memory issues.
#Generator to find square-free numbers using sieve
#By Graipher
#https://codereview.stackexchange.com/questions/151949/square-free-number
def square_free_sieve(limit):
"""Generator that yields all square free numbers less than limit"""
a = [True] * limit
# Needed so we don't mark off multiples of 1^2
yield 1
a[0] = a[1] = False
for i, is_square_free in enumerate(a):
if is_square_free:
yield i
i2 = i * i
for n in range(i2, limit, i2):
a[n] = False
#Newton's method for "integer" square root, using integer arithmetic
#Used because math.sqrt is inaccurate for large integers
#Should produce floor(sqrt(n))
#By user448810 et al.
#https://stackoverflow.com/questions/15390807/integer-square-root-in-python
def isqrt(n):
x = n
y = (x + 1) // 2
while y < x:
x = y
y = (x + n // x) // 2
return x
def squareFreeCube(limit):
"""Generates a list of all square-free numbers a > 1 below limit
that satisfies a^3 - b^2 = b+1 and (b+1)^2 - a^3 = b for some
natural number b.
"""
#Generate all square-free numbers below limit, excluding 1.
squareFreeNumbers = list(square_free_sieve(limit))[1::]
output = []
for a in squareFreeNumbers:
discriminant = 4*a**3 - 3
#Discriminant 4a^3-3 must be a square number
root = isqrt(discriminant) #equivalent to floor(sqrt(discriminant))
if root**2 != discriminant:
continue
#print "{} passes discriminant test".format(a)
#Calculate natural number b from b^2 + b + 1 - a^3 = 0
b = (root-1)/2
#print "b = {}".format(b)
#First condition should be automatically satisfied
if a**3 - b**2 != b + 1:
continue
#print "{} passes first condition".format(a)
#Second condition
if (b+1)**2 - a**3 != b:
continue
#print "{} passes second condition".format(a)
output.append(a)
return output
maxNumber = 10000000
for n in squareFreeCube(maxNumber):
print n
I've given it some thought, though.
I at first thought it may be related to Fermat's last theorem (probably because of old an Numberphile or Mathologer video), and one conjecture that caught my eye was the
Fermat-Catalan conjecture. Unfortunately, the sum of the reciprocals of the exponents in
H is greater than one.
There's also the Beal conjecture, but that doesn't apply here because two of the terms are linear or quadratic.
Another thought: if 4
a3-3 =
k2 for some natural number
k is sufficient (only 7 passed the discriminant test in the script), then that is similar to an elliptic curve. I'm not the most familiar with them, but some google-fu seems to suggest elliptic curves have a finite number of integral points. Unfortunately, the cube coefficient 4 throws a spanner into the mix. Sure, I could substitute
a =
u/4
1/3 to get the proper elliptic curve form, but now an integral point in (
k,
u) necessarily means
a is irrational.
EDIT: On reflection, I can substitute
k = 2
v, which gives me 4
a3-3 = 4
v2 <=>
a3-3/4 =
v2, which is a proper elliptic curve, but it would require either an even
k or non-integer rational
v. Since
k necessarily must be
odd in order for
b to be a natural number (cf. the formula for the roots of the original quadratic in
H),
v must therefore be a non-integer rational.
That did, however, lead me to
Siegel's theorem on integral points and
Falting's theorem, but they're a bit outside my field of expertise. One of those ought to tell us if the number of integer solutions are finite or infinite.
I'll take a stab at Falting's theorem. Take the curve 4
a3-3-
k2 = 0 (for now, assume the variables are real numbers). It has the real number solutions
k = +-sqrt(4
a3-3), where
a >= (3/4)
1/3. First, we want to check if there are any singular points. According to WolframAlpha, "a point (
a,
b) on a curve
f(
x,
y)=0 is singular if the
x and
y partial derivatives of
f are both zero at the point (
a,
b)."
Let
f(
x,
y) = 4
x3-3-
y2, and let the algebraic curve be
f(
x,
y)=0. The partial derivatives are ∂
f/∂
x = 12
x2, and ∂
f/∂
y = -2
y. The partial derivatives are both zero only at (0,0), which is not on the curve. Therefore,
f is non-singular.
Falting's theorem therefore applies.
Now the only big question is, what is the genus of
f over the rationals? Genus is roughly the number of "holes" in a topological surface, and a WolframAlpha plot seems to hint to there being zero holes, which implies infinitely many integer solutions to
H, given we already know one. But I don't think eyeballing it is proof of it.
The curve is irreducible. Therefore, per Wikipedia, the genus
g is given by the genus-degree formula:
g = (
d-1)(
d-2)/2, where
d is the degree. There is some discussion on the difference between arithmetic genus and geometric genus, but since the curve is non-singular then these are actually equal.
The curve has a degree of 3. Therefore, the genus must be 1. Proof:
g = (
d-1)(
d-2)/2 = (3-1)(3-2)/2 = 2/2 = 1.
Per Falting's theorem then (assuming working with the reals didn't change anything), and since we know (7,37) is an integral point on
f, the curve is an elliptic curve (apparently the cube coefficient doesn't change anything?), and the rational points form a finitely generated abelian group. Let's call this group
A.
What this means is that there exists a finite number of elements
xi in
A such that every element
x in
A can be written as a weighted sum of
xi, where the weights are integers. This does not necessarily mean that the number of elements in
A is finite, however, since addition over the integers form a finitely generated abelian group, which has an infinite number elements.
Thus I'm not sure if Falting's theorem answered the central question.
Moving over to Siegel's theorem, however, we might have better luck. According to Siegel's theorem, "a smooth algebraic curve
C of genus
g defined over a number field
K, presented in affine space in a given coordinate system, [has] only finitely many points on
C with coordinates in the ring of integers
O of
K, provided
g > 0."
Well, a smooth algebraic curve appears to be identical to a non-singular curve, according to Wikipedia, and the curve is non-singular. So
f must be smooth. The rationals are a number field, and I assume a curve that is smooth over the reals is also smooth over the rationals. The curve is presented in an affine space in a given coordinate system. Finally, the genus is one which is greater than zero. Therefore, the curve has only finitely many points in the ring of integers of the number field of the rationals.
In summary then, per Siegel's theorem (if my math checks out), and assuming 4
a3-3 being a square number is a sufficient condition, then there are only finitely many integral points on the curve
f, and therefore only finitely many square-free numbers that satisfy
H. I don't know how many there are, but there are at least four integer solutions to
f(
x,
y) = 0: (7,+-37), and (1,+-1). Of these, only (7,37) is of interest.
If these are the only ones, then that would mean 7 is the only square-free number greater than one that satisfies
H.
Now all I need is math professor to shoot me down. I'm betting there are glaring holes I'm too inexperienced to spot.