Data update
This commit is contained in:
parent
5150844a7d
commit
4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions
|
|
@ -1,67 +0,0 @@
|
|||
with Ada.Text_IO;
|
||||
|
||||
procedure Attractive_Numbers is
|
||||
|
||||
function Is_Prime (N : in Natural) return Boolean is
|
||||
D : Natural := 5;
|
||||
begin
|
||||
if N < 2 then return False; end if;
|
||||
if N mod 2 = 0 then return N = 2; end if;
|
||||
if N mod 3 = 0 then return N = 3; end if;
|
||||
|
||||
while D * D <= N loop
|
||||
if N mod D = 0 then return False; end if;
|
||||
D := D + 2;
|
||||
if N mod D = 0 then return False; end if;
|
||||
D := D + 4;
|
||||
end loop;
|
||||
return True;
|
||||
end Is_Prime;
|
||||
|
||||
function Count_Prime_Factors (N : in Natural) return Natural is
|
||||
NC : Natural := N;
|
||||
Count : Natural := 0;
|
||||
F : Natural := 2;
|
||||
begin
|
||||
if NC = 1 then return 0; end if;
|
||||
if Is_Prime (NC) then return 1; end if;
|
||||
loop
|
||||
if NC mod F = 0 then
|
||||
Count := Count + 1;
|
||||
NC := NC / F;
|
||||
|
||||
if NC = 1 then
|
||||
return Count;
|
||||
end if;
|
||||
|
||||
if Is_Prime (NC) then F := NC; end if;
|
||||
elsif F >= 3 then
|
||||
F := F + 2;
|
||||
else
|
||||
F := 3;
|
||||
end if;
|
||||
end loop;
|
||||
end Count_Prime_Factors;
|
||||
|
||||
procedure Show_Attractive (Max : in Natural)
|
||||
is
|
||||
use Ada.Text_IO;
|
||||
package Integer_IO is
|
||||
new Ada.Text_IO.Integer_IO (Integer);
|
||||
N : Natural;
|
||||
Count : Natural := 0;
|
||||
begin
|
||||
Put_Line ("The attractive numbers up to and including " & Max'Image & " are:");
|
||||
for I in 1 .. Max loop
|
||||
N := Count_Prime_Factors (I);
|
||||
if Is_Prime (N) then
|
||||
Integer_IO.Put (I, Width => 5);
|
||||
Count := Count + 1;
|
||||
if Count mod 20 = 0 then New_Line; end if;
|
||||
end if;
|
||||
end loop;
|
||||
end Show_Attractive;
|
||||
|
||||
begin
|
||||
Show_Attractive (Max => 120);
|
||||
end Attractive_Numbers;
|
||||
|
|
@ -1,88 +0,0 @@
|
|||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. ATTRACTIVE-NUMBERS.
|
||||
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
77 MAXIMUM PIC 999 VALUE 120.
|
||||
01 SIEVE-DATA VALUE SPACES.
|
||||
03 MARKER PIC X OCCURS 120 TIMES.
|
||||
88 PRIME VALUE SPACE.
|
||||
03 SIEVE-MAX PIC 999.
|
||||
03 COMPOSITE PIC 999.
|
||||
03 CANDIDATE PIC 999.
|
||||
|
||||
01 FACTORIZE-DATA.
|
||||
03 FACTOR-NUM PIC 999.
|
||||
03 FACTORS PIC 999.
|
||||
03 FACTOR PIC 999.
|
||||
03 QUOTIENT PIC 999V999.
|
||||
03 FILLER REDEFINES QUOTIENT.
|
||||
05 FILLER PIC 999.
|
||||
05 DECIMAL PIC 999.
|
||||
|
||||
01 OUTPUT-FORMAT.
|
||||
03 OUT-NUM PIC ZZZ9.
|
||||
03 OUT-LINE PIC X(72) VALUE SPACES.
|
||||
03 COL-PTR PIC 99 VALUE 1.
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
BEGIN.
|
||||
PERFORM SIEVE.
|
||||
PERFORM CHECK-ATTRACTIVE
|
||||
VARYING CANDIDATE FROM 2 BY 1
|
||||
UNTIL CANDIDATE IS GREATER THAN MAXIMUM.
|
||||
PERFORM WRITE-LINE.
|
||||
STOP RUN.
|
||||
|
||||
CHECK-ATTRACTIVE.
|
||||
MOVE CANDIDATE TO FACTOR-NUM.
|
||||
PERFORM FACTORIZE.
|
||||
IF PRIME(FACTORS), PERFORM ADD-TO-OUTPUT.
|
||||
|
||||
ADD-TO-OUTPUT.
|
||||
MOVE CANDIDATE TO OUT-NUM.
|
||||
STRING OUT-NUM DELIMITED BY SIZE INTO OUT-LINE
|
||||
WITH POINTER COL-PTR.
|
||||
IF COL-PTR IS EQUAL TO 73, PERFORM WRITE-LINE.
|
||||
|
||||
WRITE-LINE.
|
||||
DISPLAY OUT-LINE.
|
||||
MOVE SPACES TO OUT-LINE.
|
||||
MOVE 1 TO COL-PTR.
|
||||
|
||||
FACTORIZE SECTION.
|
||||
BEGIN.
|
||||
MOVE ZERO TO FACTORS.
|
||||
PERFORM DIVIDE-PRIME
|
||||
VARYING FACTOR FROM 2 BY 1
|
||||
UNTIL FACTOR IS GREATER THAN MAXIMUM.
|
||||
GO TO DONE.
|
||||
|
||||
DIVIDE-PRIME.
|
||||
IF PRIME(FACTOR),
|
||||
DIVIDE FACTOR-NUM BY FACTOR GIVING QUOTIENT,
|
||||
IF DECIMAL IS EQUAL TO ZERO,
|
||||
ADD 1 TO FACTORS,
|
||||
MOVE QUOTIENT TO FACTOR-NUM,
|
||||
GO TO DIVIDE-PRIME.
|
||||
DONE.
|
||||
EXIT.
|
||||
|
||||
SIEVE SECTION.
|
||||
BEGIN.
|
||||
MOVE 'X' TO MARKER(1).
|
||||
DIVIDE MAXIMUM BY 2 GIVING SIEVE-MAX.
|
||||
PERFORM SET-COMPOSITES THRU SET-COMPOSITES-LOOP
|
||||
VARYING CANDIDATE FROM 2 BY 1
|
||||
UNTIL CANDIDATE IS GREATER THAN SIEVE-MAX.
|
||||
GO TO DONE.
|
||||
|
||||
SET-COMPOSITES.
|
||||
MULTIPLY CANDIDATE BY 2 GIVING COMPOSITE.
|
||||
SET-COMPOSITES-LOOP.
|
||||
IF COMPOSITE IS NOT GREATER THAN MAXIMUM,
|
||||
MOVE 'X' TO MARKER(COMPOSITE),
|
||||
ADD CANDIDATE TO COMPOSITE,
|
||||
GO TO SET-COMPOSITES-LOOP.
|
||||
DONE.
|
||||
EXIT.
|
||||
Loading…
Add table
Add a link
Reference in a new issue