Mertens function: Difference between revisions

Add BCPL
m (→‎{{header|Phix}}: added syntax colouring the hard way)
(Add BCPL)
Line 546:
-4 -4 -3 -4 -4 -3 -2 -1 -1 -2
-2 -1 -1 0 1 2 2 1 1 1
M(N) is zero 92 times.
M(N) crosses zero 59 times.</pre>
 
=={{header|BCPL}}==
<lang bcpl>get "libhdr"
 
manifest $( limit = 1000 $)
 
let mertens(v, max) be
$( v!1 := 1
for n = 2 to max do
$( v!n := 1
for k = 2 to n do
v!n := v!n - v!(n/k)
$)
$)
 
let start() be
$( let m = vec limit
let eqz, crossz = 0, 0
writes("The first 99 Mertens numbers are:*N")
mertens(m, limit)
for y=0 to 90 by 10 do
$( for x=0 to 9 do
test x+y=0
then writes(" ")
else writed(m!(x+y),3)
wrch('*N')
$)
for x=2 to limit do
if m!x=0 then
$( eqz := eqz + 1
unless m!(x-1)=0 do crossz := crossz + 1
$)
writef("M(N) is zero %N times.*N", eqz)
writef("M(N) crosses zero %N times.*N", crossz)
$)</lang>
{{out}}
<pre>The first 99 Mertens numbers are:
1 0 -1 -1 -2 -1 -2 -2 -2
-1 -2 -2 -3 -2 -1 -1 -2 -2 -3
-3 -2 -1 -2 -2 -2 -1 -1 -1 -2
-3 -4 -4 -3 -2 -1 -1 -2 -1 0
0 -1 -2 -3 -3 -3 -2 -3 -3 -3
-3 -2 -2 -3 -3 -2 -2 -1 0 -1
-1 -2 -1 -1 -1 0 -1 -2 -2 -1
-2 -3 -3 -4 -3 -3 -3 -2 -3 -4
-4 -4 -3 -4 -4 -3 -2 -1 -1 -2
-2 -1 -1 0 1 2 2 1 1 1
M(N) is zero 92 times.
M(N) crosses zero 59 times.</pre>
2,114

edits