将 p 进数转换为 Pari/GP 中的向量
Convert a p-adic number to a vector in Pari/GP
我想将 Pari/GP p 进数的元素提取到向量中。即,如果这是我的 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)
我希望能够像这样提取向量:
[2,3,1,3,1,3,1,3]
有没有直接的方法可以做到这一点,还是我必须编写自己的函数?
PARI/GP 没有内置函数 select p-adic 展开的第 i 个分量。您可以自行定义:
padic_comp(x, i) = truncate(lift(Mod(x, x.p^(i+1))) / x.p^i)
注意,x
是t_PADIC类型,i > 0
是整数s.t。 x.p^i < x.mod
.
因此,对于您的示例,可以轻松获得向量:
x = 1/3 + O(5^8)
vector(8, i, padic_comp(x, i-1))
> [2, 3, 1, 3, 1, 3, 1, 3]
或者,您可以 lift
将其转换为整数并使用 digits
函数获取数字 - 然后需要将其反转:
Vecrev(digits(lift(O(5^8)+1/3), 5))
我想将 Pari/GP p 进数的元素提取到向量中。即,如果这是我的 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)
我希望能够像这样提取向量:
[2,3,1,3,1,3,1,3]
有没有直接的方法可以做到这一点,还是我必须编写自己的函数?
PARI/GP 没有内置函数 select p-adic 展开的第 i 个分量。您可以自行定义:
padic_comp(x, i) = truncate(lift(Mod(x, x.p^(i+1))) / x.p^i)
注意,x
是t_PADIC类型,i > 0
是整数s.t。 x.p^i < x.mod
.
因此,对于您的示例,可以轻松获得向量:
x = 1/3 + O(5^8)
vector(8, i, padic_comp(x, i-1))
> [2, 3, 1, 3, 1, 3, 1, 3]
或者,您可以 lift
将其转换为整数并使用 digits
函数获取数字 - 然后需要将其反转:
Vecrev(digits(lift(O(5^8)+1/3), 5))