Написал программу на GO, в которой реализовал этот алгоритм:
В случае

мне удалось найти решения для всех

. Для

получается уравнение

При этом,

,

или

,

,

. Для

решений нет.
Код:
Код:
package main
import (
"fmt"
"math/big"
)
func main() {
var s int64
var y int64
var mul int64
var limit int64 = 100000
var n int64
is_find := 0
fmt.Scanln(&n)
for s = 1; s < limit; s += 4 {
if is_find == 1 {
break
}
if s%5000 == 1 {
fmt.Println(s)
}
if (s%9 == 3) || (s%9 == 6) {
continue
}
if (s%7 == 0) && (s%49 != 0) {
continue
}
if s%3 == 0 {
mul = 27
} else {
mul = 1
}
for y = 1; y < s/6; y += 2 * mul {
sBig := big.NewInt(s)
yBig := big.NewInt(y)
v1 := big.NewInt(s)
v1.Mul(v1, sBig)
v1.Mul(v1, big.NewInt(n*n))
v1.Sub(v1, big.NewInt(1))
v1.Mul(v1, yBig)
v1.Mul(v1, yBig)
v2 := big.NewInt(s)
v2.Mul(v2, sBig)
v2.Mul(v2, sBig)
v2.Mul(v2, big.NewInt(2))
v1.Sub(v1, v2)
if v1.Cmp(big.NewInt(0)) == -1 {
continue
}
v2.Sqrt(v1)
v2.Mul(v2, v2)
if v1.Cmp(v2) == 0 {
fmt.Println(s, y)
is_find = 1
break
}
}
}
}
Программа работает нестабильно. Например, при вводе 42 она иногда печатает строку с решением "1765 27", а иногда почему-то не печатает. Как сделать так, чтобы строка с решением всегда печаталась?