我是pari gp的新手,只是尝试一下,玩它。 我有一个像这样的反函数。
inverse (a,n) =
{
negative = false;
if (a < 0, negative = true);
if (a < 0, a= a*-1);
i = n;
v = 0;
d = 1;
while (a>0,t=i/a; x =a;
a = i % x;
i = x;
x = d;
d = v - t*x;
v = x);
v %= n;
if (v < 0, v = (v+n)%n);
if (negative == true, return (-v));
return (v);
};
所以我有一个主要功能,包括这样的东西。
while (i<n,i++;
while(j<n,j++;
// some other codes
temp1 = inverse(temp,modulus)));
我收到的错误是&amp; [] 0Ccompo1ptr [不是矢量](t_INT)中的错误类型 我很确定其余的代码工作正常,因为错误只发生在我放置
时temp1 = inverse (temp,modulus)
在
答案 0 :(得分:0)
这里的部分问题是你没有在函数中使用变量。特别是你在函数内部和外部使用i
。这些都没有在PARI用户手册中得到很好的解释。要使变量成为局部变量,您需要执行类似my(i=n);
的操作。某些变量会自动确定范围,例如函数和sum(i=1,10,i); vector(10,i,i^2); for(i=1,10,...)
等参数,但不是i=n
之类的简单赋值。另请注意,PARI没有布尔常量true
和false
。您的代码在这种情况下有效,因为您正在执行negative==true
,它只是将多项式与true
和false
的不确定性进行比较。
答案 1 :(得分:0)
用具有适当作用域的变量替换您的函数应该可以解决该问题。试试这个:
inverse (a,n) =
{
if (a < 0, return(-inverse(-a, n)));
my(i = n, v = 0, d = 1);
while (a > 0,
my(x = a, t);
[t, a] = divrem(i,a);
i = x;
[d, v] = [v - t*x, d];
);
v % n;
}