RosettaCodeData/Task/Jacobi-symbol/Excel/jacobi-symbol.excel
2025-08-11 18:05:26 -07:00

34 lines
1.1 KiB
Text

To CopyPaste : =LAMBDA(a,n,[result],LET(s,IF(ISOMITTED(result),MOD(a,n),a),R,IF(ISOMITTED(result),EXPAND(1,COUNT(s),1,1),result),B,IF(s=0,HSTACK(s,n,R),IF(BITAND(s,1)=0,HSTACK(BITRSHIFT(s,1),n,IF(ABS(BITAND(n,7)-4)=1,-R,R)),HSTACK(MOD(n,s),s,IF(BITAND(s,3)+BITAND(n,3)-6=0,-R,R)))),new_a,INDEX(B,,1),new_n,INDEX(B,,2),new_result,INDEX(B,,3),IF(OR(new_a),Jacobi(new_a,new_n,new_result),IF(new_n=1,new_result,0))))
Easy-to-read display :
=LAMBDA(a,n,[result],
LET(
s, IF(ISOMITTED(result), MOD(a,n), a),
R, IF(ISOMITTED(result), EXPAND(1, COUNT(s), 1, 1), result),
B, IF(
s=0,
HSTACK(s,n,R),
IF(
BITAND(s,1)=0,
HSTACK(
BITRSHIFT(s,1),
n,
IF(ABS(BITAND(n,7)-4)=1,-R,R)
),
HSTACK(
MOD(n,s),
s,
IF(BITAND(s,3)+BITAND(n,3)-6=0,-R,R)
)
)
),
new_a, INDEX(B,,1),
new_n, INDEX(B,,2),
new_result, INDEX(B,,3),
IF(
OR(new_a),
Jacobi(new_a,new_n,new_result),
IF(new_n=1,new_result,0)
)
)
)