Data update

This commit is contained in:
Ingy döt Net 2026-02-01 16:33:20 -08:00
parent 5150844a7d
commit 4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions

View file

@ -4,8 +4,8 @@ mobius: function [n][
f: factors.prime n
if f <> unique f -> return 0
if? odd? size f -> return neg 1
else -> return 1
switch odd? size f -> return neg 1
-> return 1
]
mertens: function [z][sum map 1..z => mobius]
@ -20,6 +20,6 @@ print ""
mertens1000: map 1..1000 => mertens
print ["Times M(x) is zero between 1 and 1000:" size select mertens1000 => zero?]
crossed: new 0
crossed: 0
fold mertens1000 [a,b][if and? zero? b not? zero? a -> inc 'crossed, b]
print ["Times M(x) crosses zero between 1 and 1000:" crossed]

View file

@ -1,66 +0,0 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. MERTENS.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 VARIABLES.
03 M PIC S99 OCCURS 1000 TIMES.
03 N PIC 9(4).
03 K PIC 9(4).
03 V PIC 9(4).
03 IS-ZERO PIC 99 VALUE 0.
03 CROSS-ZERO PIC 99 VALUE 0.
01 OUTPUT-FORMAT.
03 OUT-ITEM.
05 OUT-NUM PIC -9.
05 FILLER PIC X VALUE SPACE.
03 OUT-LINE PIC X(30) VALUE SPACES.
03 OUT-PTR PIC 99 VALUE 4.
PROCEDURE DIVISION.
BEGIN.
PERFORM GENERATE-MERTENS.
PERFORM WRITE-TABLE.
PERFORM COUNT-ZEROES.
STOP RUN.
GENERATE-MERTENS.
MOVE 1 TO M(1).
PERFORM MERTENS-OUTER-LOOP VARYING N FROM 2 BY 1
UNTIL N IS GREATER THAN 1000.
MERTENS-OUTER-LOOP.
MOVE 1 TO M(N).
PERFORM MERTENS-INNER-LOOP VARYING K FROM 2 BY 1
UNTIL K IS GREATER THAN N.
MERTENS-INNER-LOOP.
DIVIDE N BY K GIVING V.
SUBTRACT M(V) FROM M(N).
WRITE-TABLE.
DISPLAY "The first 99 Mertens numbers are: "
PERFORM WRITE-ITEM VARYING N FROM 1 BY 1
UNTIL N IS GREATER THAN 99.
WRITE-ITEM.
MOVE M(N) TO OUT-NUM.
STRING OUT-ITEM DELIMITED BY SIZE INTO OUT-LINE
WITH POINTER OUT-PTR.
IF OUT-PTR IS EQUAL TO 31,
DISPLAY OUT-LINE,
MOVE 1 TO OUT-PTR.
COUNT-ZEROES.
PERFORM TEST-N-ZERO VARYING N FROM 2 BY 1
UNTIL N IS GREATER THAN 1000.
DISPLAY "M(N) is zero " IS-ZERO " times.".
DISPLAY "M(N) crosses zero " CROSS-ZERO " times.".
TEST-N-ZERO.
IF M(N) IS EQUAL TO ZERO,
ADD 1 TO IS-ZERO,
SUBTRACT 1 FROM N GIVING K,
IF M(K) IS NOT EQUAL TO ZERO,
ADD 1 TO CROSS-ZERO.

View file

@ -1,5 +1,5 @@
-- 25 Apr 2025
include Settings
-- 23 Aug 2025
include Setting
arg xx
if xx = '' then
xx = 99
@ -112,7 +112,4 @@ say 'M1 thru M'xx 'crosses zero' b 'times'
say Format(Time('e'),,3) 'seconds'; say
return
include Numbers
include Sequences
include Functions
include Abend
include Math