.
Не пытался чего-то мудрить и оптимизировать, поскольку всё равно перебор небольшой, тем более что с программированием я на Вы. Короче, писал первое, что пришло в голову. Комментировать лень, извините. Скажу только, что в случае
я вообще не пытался что-то придумать и сделал перебор по всем
, а в случае
я перешёл к переменным
с помощью
.
Код:
condition(a,m,n)=m*n*(a^2-4*m*n)*issquare(a^2-4*m*n)*(m^2-4*a*n)*issquare(m^2-4*a*n)*(n^2-4*a*m)*issquare(n^2-4*a*m)*(a+m+n)
case2(a)=for(m=1,a/2,for(n=m,a^2/4/m,if(condition(a,-m,-n),print("a=",a,", m=",-m,", n=",-n))))
check(a,x,y)=if((y*(x^2-a*y)%(a^2-x*y)==0)*(x*(y^2-a*x)%(a^2-x*y)==0),{m=y*(x^2-a*y)/(a^2-x*y);n=x*(y^2-a*x)/(a^2-x*y);if((n+2*y<0)*(issquare(a^2-4*m*n)),print("a=",a,", m=",m,", n=",n))})
run31(a,x)=fordiv(a*(a^3-x^3),d,if((a^2+d)%x==0,check(a,x,(a^2+d)/x)))
run32(a,x)=fordiv(a*(a^3-x^3),d,if((a^2-x^3/a<d)*(d<a^2)*((a^2-d)%x==0),check(a,x,(a^2-d)/x)))
case3x(a)=for(x=1,a-1,{run31(a,x);run32(a,x)})
run33(a,y)=fordiv(a*(a^3-y^3),d,if((d<a^2-a*y)*((a^2-d)%y==0),check(a,(a^2-d)/y,y)))
case3y(a)=for(y=1,a-1,run33(a,y))
final(a)=
{
case2(a);
case3x(a);
case3y(a)
}
final(2010)