boot_z_ =: 3 : '0!:0 < y.'
boot_z_ 'myutil.js'
4!:55 <'boot_z_'
det=.-/ .*
mp=.+/ .*
pint=.[,]%>:@i.@#@]
pdif=.}.@(]*i.@#@])
pol=.+/@([*]^i.@(#@[))
poly=.pol"1 0
pit=. ]-([ poly ])%pdif@[poly ]
pit1=. 3 : 'x;(x=.>{.y.)pit>{:y.'
pnm=.>@{:@(pit1 ^:_@;)
pnms=.pnm f."1 0
N=:100000
lta=: 3 :'(y. mult y.)sub 2'
dig=:10&#.(^:_1)
lpower=: 3 : 0
n=.y.
m=.p=.2
i=.1
while.n>i do.
rp=.p mult m
p=.rp
i=.>:i
end.
''
p sub 1
)
add=: 3 : 0
:
x=.x.
y=.y.
i=.#x
if.(#x)<#y do.
i=.#y
x=.(-i){.x
else.y=.(-i){.y
end.
z=.x+y
i=.<:i
while.i>:0 do.
zi=.(i{x)+i{y
if.c=.N<:zi do.
z=.(zi-N) i}z
x=.(>:(<:i){x) (<:i)}x
else. z=.zi i}z
end.
i=.<:i
end.
z
if. c=1 do.1,z end.
)
sqr=: 3 : 0
y=.y.
i=.0
while. y>:i do.
y=.y add y
i=.i+1
end.
y
)
sub=: 3 : 0
:
x=.x.
y=.y.
i=.#x
y=.(-i){.y
if.(0{x)<0{y do.
'error-negativ difference'
return
end.
z=.x-y
i=.<:i
while.i>:0 do.
zi=.(i{x)-i{y
if.zi<0 do.
z=.(N+zi) i}z
x=.(<:(<:i){x) (<:i)}x
else. z=.zi i}z
end.
i=.<:i
end.
z
)
div=: 3 : 0
:
x=.x.
y=.y.
z=.(#x)#0
n=.<:#x
i=.0
while.i<:n do.
p=.<.(i{x)%y
q=.y|(i{x)
if.i<n do.
x=.((q*N)+(>:i){x)(>:i)}x
end.
z=.p i}z
i=.>:i
end.
z
)
mul=: 3 : 0
:
i=.<:#x.
x=.x.
q=.y.
p=.x*q
while.i>:0 do.
if.(pi=.i{p)>:N do.
p=.(N|pi) i}p
if.i>0 do.
p=.(((<:i){p)+<.pi%N)(<:i)}p
else.p=.(<.pi%N),p
end.
end.
i=.<:i
end.
p
)
mult=: 3 : 0
:
p=.x.
q=.y.
i=.<:#q
j=.i
r=.i#0
while.i>:0 do.
rp=.(p mul (i{q)),(j-i)#0
r=.r add rp
i=.<:i
end.
r
)
rp127=: 3 : 0
:
x=.x.
n=.y.
m=.1
while. n>:m do.
xa=.x xmody3 127
wr xa
x=.xa
m=.>:m
end.
''
xa
)
rp521c=: 3 : 0
:
x=.x.
n=.y.
m=.1
while. n>:m do.
xa=.x xmody6 521
if.(0{xa)=0 do.xa=.}.xa end.
wr xa
x=.xa
m=.>:m
end.
''
xa
)
xmody3=: 3 : 0
:
x=.(lta x.)mul 32[Mp=.(lpower y.)mul 32
y=.{.Mp[i=.0
if.((0{x)-y)>0 do.n=.(#x)-#Mp
else.n=.<:(#x)-#Mp end.
while.n>:i do.
if.((0{x)-y)>0 do.k=.<.(0{x)%y
else.k=.<.(((0{x)*N)+1{x)%y end.
label_0.mpk=.Mp mul k
if.(((0{x)*N)+1{x)<((0{mpk)*N)+1{mpk
do. k=.<:k
goto_0. end.
t=.x sub (Mp mul k),(n-i)#0
if.(0{t)=0 do.xa=.}.t else.xa=.t end.
x=.xa
i=.>:i
end.
''
if.(0{xa)=0 do.wr xa end.
xa div 32
)
xmody6=: 3 : 0
:
x=.(lta x.)mul 512[Mp=.(lpower y.)mul 512
y=.{.Mp[i=.0
if.((0{x)-y)>0 do.n=.(#x)-#Mp
else.n=.<:(#x)-#Mp end.
while.n>:i do.
if.((0{x)-y)>0 do.k=.<.(0{x)%y
else.k=.<.(((0{x)*N)+1{x)%y end.
label_0.mpk=.Mp mul k
if.(((0{x)*N)+1{x)<((0{mpk)*N)+1{mpk
do. k=.<:k
goto_0. end.
t=.x sub (Mp mul k),(n-i)#0
if.(0{t)=0 do.xa=.}.t else.xa=.t end.
x=.xa
i=.>:i
end.
''
if.(0{dig 0{xa)=9 do.xa=.}.}.xa add Mp end.
xa div 512
)