Data update

This commit is contained in:
Ingy döt Net 2026-04-30 12:34:36 -04:00
parent 4bb20c9b71
commit cbaf4c4b64
12390 changed files with 318560 additions and 27248 deletions

View file

@ -0,0 +1,66 @@
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,4 +1,4 @@
-- 23 Aug 2025
-- 3 Mar 2026
include Setting
arg xx
if xx = '' then
@ -8,14 +8,16 @@ say 'MERTENS FUNCTION'
say version
say
call Tasks1 xx
call Timer 'R'
call Tasks2 xx
call Timer 'R'
call Tasks3 xx
call Timer 'R'
exit
Tasks1:
procedure expose squa.
procedure expose squa. memo.
arg xx
call Time('r')
say 'Tasks using Sieve...'
call Squarefrees 2*xx
if xx < 100 then
@ -46,13 +48,11 @@ end
say
say 'M1 thru M'xx 'equals zero' a 'times'
say 'M1 thru M'xx 'crosses zero' b 'times'
say Format(Time('e'),,3) 'seconds'; say
return
Tasks2:
procedure expose squa.
procedure expose squa. memo.
arg xx
call Time('r')
say 'Tasks using Moebius function...'
if xx < 100 then
say 'M1 thru M'xx
@ -75,13 +75,11 @@ end
say
say 'M1 thru M'xx 'equals zero' a 'times'
say 'M1 thru M'xx 'crosses zero' b 'times'
say Format(Time('e'),,3) 'seconds'; say
return
Tasks3:
procedure expose squa.
procedure expose squa. memo.
arg xx
call Time('r')
say 'Tasks using Squarefree function...'
if xx < 100 then
say 'M1 thru M'xx
@ -109,7 +107,7 @@ end
say
say 'M1 thru M'xx 'equals zero' a 'times'
say 'M1 thru M'xx 'crosses zero' b 'times'
say Format(Time('e'),,3) 'seconds'; say
return
-- Squarefrees; Factors; Even; Odd; Moebius; Timer
include Math

View file

@ -0,0 +1,6 @@
Moebius ← +0/ׯ≤1⊕⧻⊸⊛°/×
Mertens ← |1 memo(⨬(+⊃(Mertens-1|Moebius)|1)⊸=1)
&s↯∞_10≡Mertens↘1⇡101
⊃(&p$"Crosses zero _ times"/+⌕0_1=0
| &p$"Equals zero _ times"/+
)=0≡Mertens↘1⇡1001