Data update
This commit is contained in:
parent
5150844a7d
commit
4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue