Loïc Grenié on Mon, 18 Nov 2024 15:47:46 +0100


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

Re: Is there a function for sum of square matrix antidiagonal like "trace()" for main diagonal?


On Mon 18 Nov 2024 at 15:34, Hermann scrisse:
On 2024-11-18 15:12, Loïc Grenié wrote:
> On Mon 18 Nov 2024 at 13:27, Hermann wrote:
>
>> I used below code, is there something shorter?
>>
>> assert(isprime(trace(ps)));
>> assert(isprime(vecsum([ps[i,#ps+1-i]|i<-[1..#ps]])));
>
>      You can define a function atr (antitrace):
>
> atr(M)=my(j=#M+1);sum(i=1,#M,j--;M[i,j]);
>
>        Hope this helps,
>
>              Loïc

Interesting, I would have thought that your atr function would
be faster than my vecsum solution, but it is slower ...

pi@raspberrypi5:~/PrimeSquares $ gp -q
? M=readvec("15.gp")[1];
? #M
15
? atr(M)=my(j=#M+1);sum(i=1,#M,j--;M[i,j]);
? for(i=1,100000,atr(M))
? ##
   ***   last result: cpu time 996 ms, real time 996 ms.
? for(i=1,100000,vecsum([M[i,#M+1-i]|i<-[1..#M]]))
? ##
   ***   last result: cpu time 597 ms, real time 598 ms.
?

    If you put yours inside a function, it's actually the same.

           Loïc