这组代码可以做哪些改进来生成这个问题的解决方案?

问题描述 投票:0回答:1

除了增加 y 的范围(-1000 到 1000 之间)之外,我还应该对这些代码进行哪些其他改进,以便当我在任何 pari gp 在线编译器上运行它时,它会返回非常有效的答案?

当我在 -1000 到 1000 以及 -10000 到 10000 的范围内运行这些代码时,它返回了一些答案,但没有返回超出这些范围的答案。虽然我知道在 y: -10^12 到 10^12 的范围之间,有一些理想的解决方案,例如当 y = 22 741 480 906 时,我不知道还能做什么才能系统地得到这样的结果除了如上所述增加 y 的范围之外。

{
 for(y=-1000, 1000,
    H= hyperellratpoints((16224+'w^3-624*'w*y-3*'w^2*y^2+1248*y^3+3*'w*y^4-3*y^6)/6, 10^7);
    for(i=1, #H,
      z= H[i][2];
      if(z>0, if(z==floor(z),
        w= H[i][1];
        k= (w^2-624*y+3*y^4)/144;
        if(k==floor(k),
          x= (3*y^2-w)/12;
          if(x==floor(x),
            if(x!=0, if(12*x^2-6*y^2*x+y*(y^3-52)-12*k==0 && -z^2+(y^3-52)^2-288*k*x==0,
              print("("x", "y", "z", "k")")
            ))
          )
        )
      ))
    )
 )
}
pari pari-gp
1个回答
0
投票

粗略地看一下你的代码,似乎你正在寻找一个方程

6*z^2 = P(y,w)
的整数解,对于一些具有整数系数的显式多项式
P
,并且你还需要两个辅助量是积分的。为此,您可以尝试在一定范围内尝试
y
的所有积分值,计算每个此类
y
方程
z^2=P/6
的有界高度的所有有理解,然后使用各种测试进行筛选(特别是
z > 0 
)。

回答你的主要问题:PARI/GP 中没有现成的函数来查找一般曲面上的整数点。

你可以而且应该做的是

  1. 尽可能地在算术上简化问题。例如,如果
    y
    w
    x = (3y^2-w)/12
    是积分,则 3 除
    w = 3W
    并且您现在希望
    x = (y^2 - W) / 4
    是积分,这意味着 'y'、'w' 和 'W' 以及相同的奇偶校验(事实上
    4 | W
    当偶数时,与 1 mod 4 全等)。

此时您可能想将问题分为两种情况:

y
奇数或偶数等。完成后尽可能使用新变量。然后可以删除所有完整性测试:如果新变量中有积分解,它们将自动满足整除条件(并且除以常量会简化)。

  1. 我不知道你为什么要检查

    12*x^2-6*y^2*x+y*(y^3-52)-12*k==0
    -z^2+(y^3-52)^2-288*k*x==0
    ,因为两者都正式遵循
    k
    x
    的定义,因此总是正确的。

  2. 特殊情况

    x = 0
    (或
    y = 3*w^2
    )提供了微不足道的解决方案,因为你的方程变成了
    z = |y^3 - 52|
    (我知道你排除了这些)。

  3. 这一切都归结为寻找方程

    a^2 = Q(b,c)
    的积分解,其中看到的每个人都是积分。您要么必须更多地了解曲面的几何形状(例如,了解为什么
    x = 0
    会导致所有这些琐碎的解决方案),要么简单地在某个范围内循环
    b,c
    积分并检查结果是否是正方形。该测试速度非常快,您当然可以在一台计算机上在合理的时间内检查大约 10^16 对
    (b,c)
    。 (如果您可以访问计算集群,则为 10^20。)

最后一点:要测试

x
是否是 PARI/GP 中的整数(在我推荐的版本中不再需要),请使用
type(x) == "t_INT"
denominator(x) == 1
(如果您已经知道
x
是有理数)数量。

© www.soinside.com 2019 - 2024. All rights reserved.