hermann on Sun, 05 May 2024 09:30:50 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Questions on accessing string character/substring and "F=readvec(...);F=F[#F];"


Based on data from

http://www.prothsearch.com/fermat.html

I created new gist with factors of Fermat numbers F0..F32:

https://gist.github.com/Hermann-SW/df18355362f5cce70da6a2d5f20a22ca


1)

While reading Fermat.gp, its entries get verified.
Some rightmost prime factors are not numbers but eg "P252" for 252 decimal digit prime factor of F10. So I needed to access that string's first character (to differ from composites like @C1133@).
I found no such command in GP user guide.
Also I did need to access substring starting at second character and convert it to number.
With that number correctness for eg F10 row can be proven:

$ grep F10 Fermat.gp
[45592577, 6487031809, 4659775785220018543264560743076778192897, "P252"], \\ F10
$

I did that with this code, for which I want to ask whether simpler string commands exist?

        ...
        p=vecprod(v[1..#v-1]);
        assert(f%p==0);
        if(Vec(s)[1]=="P",
          assert(#digits(f\p)==eval(strjoin(Vec(s)[2..#s])));
          F__[1+i][#v]=f\p;
        )
        ...

2)

During reading verification the array gets modified, all "P..." values are replaced by last command in above "if". With F[#F] I can access the array with replacements, with F[1] the unmodified array:

? F=readvec("Fermat.gp");F=F[#F];
? F[1+8]
[1238926361552897, 93461639715357977769163558199606896584051237541638188580280321]
? F=readvec("Fermat.gp");F=F[1];
? F[1+8]
[1238926361552897, "P62"]
?

I had to use internal variable "F__" in Fermat.gp to achieve that (last line). Can I achieve what I described without namespace pollution "F__" in Fermat.gp ?


Regards,

Hermann.