我已经搜索了一些关于如何在C 程序中使用 PARI 库的教程,但不幸的是,我只找到了在命令行界面中使用 GP 包的通用教程。
有人可以帮忙吗?例如,我想初始化一个 3x3 矩阵并找到它的 1000 次幂。在 gp(CLI)中,这可以通过键入以下内容来实现:
? A=[1,2,3;4,5,6;7,8,9]
? A^1000
Run Code Online (Sandbox Code Playgroud)
但是我发现在C 源文件中做这个安静简单的事情没有帮助。是否有提供此类示例的综合教程或文档?任何评论将不胜感激!
Pari/GP是一个优秀的数论相关函数库。问题是似乎没有任何地方的 python 的最新包装器,(pari-python使用旧版本的 pari),我想知道是否有人知道其他类似的库/包装器pari 或使用 pari 的一种。
我知道 SAGE,但它对于我的需求来说太大了。GMPY 也很出色,但是我错过了一些内在的 pari 函数,我宁愿使用 python 而不是提供的 GP 环境。NZMATH、mpmath、scipy 和 sympy 也都被考虑在内。
在相关说明中,是否有人对加载 pari dll 本身并使用其中包含的函数有任何建议?除了加载它和学习函数指针之外,我尝试过很少成功。
假设我在 PARI/GP 中有一个包含 n 个元素的向量。
我想从 n 个元素中生成 k 个组合。
例如,如果向量为 [3,7,11,14,18] 且 k=3,则输出应为
[3,7,11]
[3,7,14]
[3,7,18]
[3,11,14]
[3,11,18]
[3,14,18]
[7,11,14]
[7,11,18]
[7,14,18]
[11,14,18]
Run Code Online (Sandbox Code Playgroud)
PARI/GP 中是否有命令执行此操作,或者我是否必须对该功能进行编程?
模乘逆元是一个整数 \xe2\x80\x98x\xe2\x80\x99 使得。
\nax \xe2\x89\xa1 1 (mod m)。
\n那么,有什么方法可以计算 pari\\gp 计算器中的模乘法逆元吗?
\n如果这个问题微不足道或重复,我真的很抱歉。
\n我使用长度为N的自然数向量和条目总和S,例如,(N,S)=(4,7)一个示例向量 E=[1,2,1,3] 其中所有条目向量中假设> 0。
我想列出具有相同配置(N,S)=(4,7)的所有向量,但应过滤掉旋转。
问题:最好的算法是什么?
(我的实际实现是在 Pari/GP 中,它提供了一个嵌套的 for 循环,使用下限和上限索引值的边界向量)
我首先尝试了一个“强力”解决方案,因为我使用嵌套的 for 循环生成一个列表,但将向量连接的双重concat(E,E)存储在列表EE[]中,然后,对于每个新向量E=[e_1,e_2,e_3,e_4]检查该向量是否出现在已检查列表EE[]中的串联向量中,如果没有则将其附加为新的有效条目
EE[k]=E||E = [e_1,e_2,e_3,e_4,e_1,e_2,e_3,e_4]。这里的比较就像字符串比较 - 如果匹配从位置1开始或直到N ,则始终会找到匹配。
这种方法有效,但在我看来有点像蛮力,并且由于其组合结构随着N和S的增加而爆炸。
是否存在更好的方法?
注意:目标语言是Pari/GP
注意:伪算法就足够了 - 但也许 Pari/GP 中的工具允许一些更紧凑的解决方案/符号。
示例,(N,S)=(4,7)
下面是一个非常简单的示例。
假设通过嵌套循环我通过以下方式获得向量E :
[1,1,1,4] --- first vector: store as [1,1,1,4;1,1,1,4] in EE
[1,1,2,3] --- 2nd vector: not in EE so far, append …Run Code Online (Sandbox Code Playgroud) 我编写了一个 cpp 源代码,其中包含 pari.h 头文件:
#include<string>
#include<vector>
#include<algorithm>
#include<cmath>
#include<stdlib.h>
#include<time.h>
#include<iterator> // for ostream_iterator
#include<strings.h>
#include<string.h>
#include<sstream>
#include <pari/pari.h> // for PARI/GP library
#include<Rcpp.h> // for sourceCpp to work, this line must be uncommented
// Enable C++11 via this plugin (Rcpp 0.10.3 or later)
// [[Rcpp::plugins(cpp11)]]
using namespace std;
using namespace Rcpp; // for sourceCpp to work, this line must be uncommented
// [[Rcpp::export]]
int main() {
long maxp = 1000000; // max value
pari_init(500000,2); // initiate pari
size_t …Run Code Online (Sandbox Code Playgroud) 我正在使用在 ASUS x75 上运行的 GP 和最小多项式,如下所示:
(19:25) gp > elt=Mod(a*x^3+b*x^2+c*x+d,('x^5-1)/('x-1))
%122 = Mod(a*x^3 + b*x^2 + c*x + d, x^4 + x^3 + x^2 + x + 1)
(19:25) gp > (poly=minpoly(elt,x='x))
%123 = x^4 + (a + (b + (c - 4*d)))*x^3 + (a^2 + (-3*b + (2*c - 3*d))*a + (b^2 + (2*c - 3*d)*b + (c^2 - 3*d*c + 6*d^2)))*x^2 + (a^3 + (-2*b + (3*c - 2*d))*a^2 + (-2*b^2 + (c + 6*d)*b + (-2*c^2 - …Run Code Online (Sandbox Code Playgroud) 这可能是一个非常愚蠢的问题——但我似乎无法在 pari-gp 文献中找到相关的解释。我正在库中寻找一个函数,它接受多项式、级数或常数,并吐出常数部分(在常数情况下,它只会吐出输入)。
我一直在使用的工具是,polcoef(Expression,0)但这不适用于多个变量——我们必须再次调用该函数。
例如,
polcoef(1+z+z^2,0)
%2 = 1
polcoef(1+y+z,0)
%3 = z + 1
polcoef(polcoef(1+y+z,0),0)
%4 = 1
Run Code Online (Sandbox Code Playgroud)
是否有一个内置函数可以对任意数量的变量执行此操作?这样,我就不必迭代该polcoef函数了。这将大大清理我的代码;我知道我可能可以自己构建一个递归函数,但我想知道是否有内置的东西可以做到这一点。
非常感谢任何帮助、评论、编辑和澄清请求。
问候。
编辑:
忘记添加,我想要的输出是,
Const(1+x+y+z)
1
Const(Pi+x^2+p)
Pi
Run Code Online (Sandbox Code Playgroud) 我想将 Pari/GP p-adic 数的元素提取到向量中。即,如果这是我的 p 进数:
O(5^8)+1/3
> 2 + 3*5 + 5^2 + 3*5^3 + 5^4 + 3*5^5 + 5^6 + 3*5^7 + O(5^8)
Run Code Online (Sandbox Code Playgroud)
我希望能够提取这样的向量:
[2,3,1,3,1,3,1,3]
Run Code Online (Sandbox Code Playgroud)
有没有直接的方法来做到这一点还是我必须编写自己的函数?
pari ×9
pari-gp ×8
c ×1
filtering ×1
function ×1
gcc ×1
nested-loops ×1
polynomials ×1
python ×1
r ×1
rcpp ×1
stack-size ×1