Data update
This commit is contained in:
parent
5150844a7d
commit
4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions
|
|
@ -1,76 +0,0 @@
|
|||
with Ada.Text_IO; with Ada.Integer_Text_IO;
|
||||
with Ada.Strings.Fixed;
|
||||
|
||||
procedure Totient is
|
||||
|
||||
function Totient (N : in Integer) return Integer is
|
||||
Tot : Integer := N;
|
||||
I : Integer;
|
||||
N2 : Integer := N;
|
||||
begin
|
||||
I := 2;
|
||||
while I * I <= N2 loop
|
||||
if N2 mod I = 0 then
|
||||
while N2 mod I = 0 loop
|
||||
N2 := N2 / I;
|
||||
end loop;
|
||||
Tot := Tot - Tot / I;
|
||||
end if;
|
||||
|
||||
if I = 2 then
|
||||
I := 1;
|
||||
end if;
|
||||
I := I + 2;
|
||||
end loop;
|
||||
|
||||
if N2 > 1 then
|
||||
Tot := Tot - Tot / N2;
|
||||
end if;
|
||||
|
||||
return Tot;
|
||||
end Totient;
|
||||
|
||||
Count : Integer := 0;
|
||||
Tot : Integer;
|
||||
Placeholder : String := " n Phi Is_Prime";
|
||||
Image_N : String renames Placeholder ( 1 .. 3);
|
||||
Image_Phi : String renames Placeholder ( 6 .. 8);
|
||||
Image_Prime : String renames Placeholder (11 .. Placeholder'Last);
|
||||
use Ada.Text_IO;
|
||||
use Ada.Integer_Text_IO;
|
||||
|
||||
Last : constant := 25;
|
||||
begin
|
||||
|
||||
Put_Line (Placeholder);
|
||||
|
||||
for N in 1 .. Last loop
|
||||
Tot := Totient (N);
|
||||
|
||||
if N - 1 = Tot then
|
||||
Count := Count + 1;
|
||||
end if;
|
||||
Put (Image_N, N);
|
||||
Put (Image_Phi, Tot);
|
||||
Image_Prime := Ada.Strings.Fixed.Tail
|
||||
(Source => (if N - 1 = Tot then True'Image else False'Image),
|
||||
Count => Image_Prime'Length);
|
||||
Put_Line (Placeholder);
|
||||
end loop;
|
||||
New_Line;
|
||||
|
||||
Put_Line ("Number of primes up to " & Last'Image &" =" & Count'Image);
|
||||
|
||||
for N in Last + 1 .. 100_000 loop
|
||||
Tot := Totient (N);
|
||||
|
||||
if Tot = N - 1 then
|
||||
Count := Count + 1;
|
||||
end if;
|
||||
|
||||
if N = 100 or N = 1_000 or N mod 10_000 = 0 then
|
||||
Put_Line ("Number of primes up to " & N'Image & " =" & Count'Image);
|
||||
end if;
|
||||
end loop;
|
||||
|
||||
end Totient;
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
scope # Totient function
|
||||
|
||||
# returns the number of integers k where 1 <= k <= n that are mutually prime to n
|
||||
local procedure totient( n :: number ) :: number
|
||||
local proc totient( n :: number ) :: number
|
||||
if n < 3 then result := 1
|
||||
elif n = 3 then result := 2
|
||||
else
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ loop 1..100000 'i [
|
|||
t: totient i
|
||||
prime?: 1 = i - t
|
||||
if i < 26 [
|
||||
prints ~« Φ(|pad.with:`0` to :string i 2|) = |pad to :string t 2|
|
||||
prints ~« Φ(|pad.with:'0' to :string i 2|) = |pad to :string t 2|
|
||||
if prime? -> prints ", prime"
|
||||
print ""
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,93 +0,0 @@
|
|||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. TOTIENT-FUNCTION.
|
||||
|
||||
DATA DIVISION.
|
||||
WORKING-STORAGE SECTION.
|
||||
01 TOTIENT-CALCULATION.
|
||||
03 N PIC 9(6).
|
||||
03 TOTIENT PIC 9(6).
|
||||
03 DIVISOR PIC 9(6).
|
||||
03 DIV-SQUARE PIC 9(6).
|
||||
03 MODULUS PIC 9(6).
|
||||
|
||||
01 LOOP-VARS.
|
||||
03 PRIME-COUNT PIC 9(4).
|
||||
03 CURRENT-N PIC 9(6).
|
||||
03 PRIME-TOTIENT PIC 9(6).
|
||||
|
||||
01 OUTPUTFORMAT.
|
||||
03 HEADER PIC X(20) VALUE " N Totient Prime?".
|
||||
03 TOTIENT-ROW.
|
||||
05 OUT-N PIC Z9.
|
||||
05 FILLER PIC XX VALUE SPACES.
|
||||
05 OUT-TOTIENT PIC Z(6)9.
|
||||
05 FILLER PIC XX VALUE SPACES.
|
||||
05 OUT-PRIME PIC X(5).
|
||||
03 PRIME-COUNT-ROW.
|
||||
05 FILLER PIC X(22) VALUE "Number of primes up to".
|
||||
05 OUT-PRMTO PIC Z(5)9.
|
||||
05 FILLER PIC XX VALUE ": ".
|
||||
05 OUT-PRMCNT PIC ZZZ9.
|
||||
|
||||
PROCEDURE DIVISION.
|
||||
BEGIN.
|
||||
MOVE ZERO TO PRIME-COUNT.
|
||||
DISPLAY HEADER.
|
||||
PERFORM SHOW-SMALL-TOTIENT
|
||||
VARYING CURRENT-N FROM 1 BY 1
|
||||
UNTIL CURRENT-N IS GREATER THAN 25.
|
||||
MOVE 25 TO OUT-PRMTO.
|
||||
MOVE PRIME-COUNT TO OUT-PRMCNT.
|
||||
DISPLAY PRIME-COUNT-ROW.
|
||||
PERFORM COUNT-PRIMES
|
||||
VARYING CURRENT-N FROM 26 BY 1
|
||||
UNTIL CURRENT-N IS GREATER THAN 10000.
|
||||
STOP RUN.
|
||||
|
||||
SHOW-SMALL-TOTIENT.
|
||||
MOVE CURRENT-N TO N.
|
||||
PERFORM CALCULATE-TOTIENT.
|
||||
MOVE CURRENT-N TO OUT-N.
|
||||
MOVE TOTIENT TO OUT-TOTIENT.
|
||||
MOVE "No" TO OUT-PRIME.
|
||||
SUBTRACT 1 FROM CURRENT-N GIVING PRIME-TOTIENT.
|
||||
IF TOTIENT IS EQUAL TO PRIME-TOTIENT,
|
||||
MOVE "Yes" TO OUT-PRIME,
|
||||
ADD 1 TO PRIME-COUNT.
|
||||
DISPLAY TOTIENT-ROW.
|
||||
|
||||
COUNT-PRIMES.
|
||||
MOVE CURRENT-N TO N.
|
||||
PERFORM CALCULATE-TOTIENT.
|
||||
SUBTRACT 1 FROM CURRENT-N GIVING PRIME-TOTIENT.
|
||||
IF TOTIENT IS EQUAL TO PRIME-TOTIENT, ADD 1 TO PRIME-COUNT.
|
||||
IF CURRENT-N IS EQUAL TO 100 OR 1000 OR 10000,
|
||||
MOVE CURRENT-N TO OUT-PRMTO,
|
||||
MOVE PRIME-COUNT TO OUT-PRMCNT,
|
||||
DISPLAY PRIME-COUNT-ROW.
|
||||
|
||||
CALCULATE-TOTIENT.
|
||||
MOVE N TO TOTIENT.
|
||||
MOVE 2 TO DIVISOR.
|
||||
MOVE 4 TO DIV-SQUARE.
|
||||
PERFORM DIVIDE-STEP.
|
||||
PERFORM DIVIDE-STEP
|
||||
VARYING DIVISOR FROM 3 BY 2
|
||||
UNTIL DIV-SQUARE IS GREATER THAN N.
|
||||
IF N IS GREATER THAN 1,
|
||||
COMPUTE TOTIENT = TOTIENT - TOTIENT / N.
|
||||
|
||||
DIVIDE-STEP.
|
||||
MULTIPLY DIVISOR BY DIVISOR GIVING DIV-SQUARE.
|
||||
DIVIDE N BY DIVISOR GIVING MODULUS.
|
||||
MULTIPLY DIVISOR BY MODULUS.
|
||||
SUBTRACT MODULUS FROM N GIVING MODULUS.
|
||||
IF MODULUS IS ZERO,
|
||||
PERFORM DIVIDE-OUT UNTIL MODULUS IS NOT ZERO,
|
||||
COMPUTE TOTIENT = TOTIENT - TOTIENT / DIVISOR.
|
||||
|
||||
DIVIDE-OUT.
|
||||
DIVIDE DIVISOR INTO N.
|
||||
DIVIDE N BY DIVISOR GIVING MODULUS.
|
||||
MULTIPLY DIVISOR BY MODULUS.
|
||||
SUBTRACT MODULUS FROM N GIVING MODULUS.
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
-- 8 May 2025
|
||||
include Settings
|
||||
-- 24 Aug 2025
|
||||
include Setting
|
||||
|
||||
say 'TOTIENT FUNCTION (PHI)'
|
||||
say version
|
||||
|
|
@ -92,8 +92,4 @@ end
|
|||
say
|
||||
return
|
||||
|
||||
include Functions
|
||||
include Special
|
||||
include Numbers
|
||||
include Sequences
|
||||
include Abend
|
||||
include Math
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue