(phixonline)-->
with javascript_semantics
requires("1.0.2") -- (skip arg added to join_by)
sequence mcache = {1}
function Mertens(integer n)
for m=length(mcache)+1 to n do
integer mm = 1
for k=2 to m do
mm -= mcache[floor(m/k)]
end for
mcache &= mm
end for
return mcache[n]
end function
constant first = 99, perline = 10
--constant first = 199, perline = 20 -- matches C/Go/etc
--constant first = 143, perline = 12 -- matches wp
sequence s = {" ."}&apply(tagset(first),Mertens)
printf(1,"First %d Mertens numbers:\n",first)
puts(1,join_by(s,1,perline," ",fmt:="%3d",skip:=1))
integer prev = 1, zeroes = 0, crosses = 0
for n=2 to 1000 do
integer m = Mertens(n)
if m=0 then
zeroes += 1
crosses += prev!=0
end if
prev = m
end for
printf(1,"\nMertens[1..1000] equals zero %d times and crosses zero %d times\n",{zeroes,crosses})