【问题标题】:Mestre's sum with PARI/GPMestre 与 PARI/GP 的总和
【发布时间】:2017-02-21 10:01:57
【问题描述】:

我将 Mestre 的总和定义为:

S(E, N) = {
    my (s = 0.0);
    forprime(p = 2, N,
        my (a = ellap(E, p));
        s += (2-a) / (p+1-a)
    );

    return (s);
}

并定义多项式A(t)B(t),我想计算曲线的上述总和:y^2 = x^3 + A(t)x^2 + B(t)x 一些-700 < t < 700,然后打印出来。于是我写了:

for(t = -700, 700, {
    E = ellinit([0, A(t), 0, B(t), 0]);
    if(E == [], , print(t, ": ", S(E, 50000)))
})

它有效。现在我想对多项式A(t, t')B(t, t') 执行相同的操作,其中两个变量-n < tt' < n 用于某个任意整数n,然后仅打印带有S(E, 50000) > 5 的曲线(t 和@ 987654334@ 是独立的)。有谁能告诉我正确的代码吗? 谢谢。

【问题讨论】:

    标签: pari pari-gp


    【解决方案1】:

    如果我对问题的理解正确,以下 PARI/GP 代码应该适合您:

    n = 100
    forvec(P = [[-n, 0], [0, n]], {
        E = ellinit([0, A(P[1], P[2]), 0, B(P[1], P[2]), 0]);
        if (E == [], next());
    
        my (v = S(E, 50000));
        if (v > 5, print(P, ": ", v))
    })
    

    请注意,变量P 表示变量tt' 的区间。我将t 的上限设为0,将t' 的下限也设为0。

    【讨论】:

    • 感谢 Piotr!做得好。我怎么知道在pari挂起之前的计算时间?如果它挂起如何在不关闭平价的情况下停止计算?因为我应该再次输入所有数据
    • @user371596 不幸的是,如果不运行代码,您将无法了解计算时间。您可以打印出进度以明确完成左侧工作的时间。您也可以将最近的结果转储到外部文件,以免错过。
    • 如果我想为 t=(r^2 − s^2 − 2u^2 + 2v^2r^2 − s^2 − 2u^2 + 2v^2)/ 2(ru + sv) 和 t'=(rs − 2uv)/(ru + sv) 其中 r,u,s,v 是区域内的整数:|s|+|r|+|u|+|v|
    • @user371596:您可以使用forvec(P=[[0,400],[0,400],[0,400],[0,400]], if(vecsum(P)<400, ...)) 之类的代码强加您需要的区域。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 2023-04-09
    • 2020-09-30
    • 2014-08-23
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    相关资源
    最近更新 更多