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 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.
?