有没有更好的方法来获取 PARI/gp 中的子字符串?
Is there a better way to get substring in PARI/gp?
? substr(s,n,m)=concat(Vec(s)[n..n+m-1])
%1 = (s,n,m)->concat(Vec(s)[n..n+m-1])
? s="h0getcwdfailedNosuchfileordirectory"
%2 = "h0getcwdfailedNosuchfileordirectory"
? substr(s,4,8)
%3 = "etcwdfai"
问题:有没有更好的方法(内置函数?)获取PARI/gp中的子字符串?
不是真的。这是一个更快的 hack(也使用更少的内存)
substr2(s,n,m)=strchr(Vecsmall(s)[n..n+m-1])
在你的例子中计时:
? substr2(s,4,8)
%1 = "etcwdfai"
? for(i=1,10^6,substr(s,4,8))
time = 536 ms.
? for(i=1,10^6,substr2(s,4,8))
time = 266 ms.
? substr(s,n,m)=concat(Vec(s)[n..n+m-1])
%1 = (s,n,m)->concat(Vec(s)[n..n+m-1])
? s="h0getcwdfailedNosuchfileordirectory"
%2 = "h0getcwdfailedNosuchfileordirectory"
? substr(s,4,8)
%3 = "etcwdfai"
问题:有没有更好的方法(内置函数?)获取PARI/gp中的子字符串?
不是真的。这是一个更快的 hack(也使用更少的内存)
substr2(s,n,m)=strchr(Vecsmall(s)[n..n+m-1])
在你的例子中计时:
? substr2(s,4,8)
%1 = "etcwdfai"
? for(i=1,10^6,substr(s,4,8))
time = 536 ms.
? for(i=1,10^6,substr2(s,4,8))
time = 266 ms.