How to resolve the algorithm Strong and weak primes step by step in the XPL0 programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Strong and weak primes step by step in the XPL0 programming language

Table of Contents

Problem Statement

Note that the definition for   strong primes   is different when used in the context of   cryptography.

Show all output here.

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Strong and weak primes step by step in the XPL0 programming language

Source code in the xpl0 programming language

proc NumOut(Num);       \Output positive integer with commas
int  Num, Dig, Cnt;
[Cnt:= [0];
Num:= Num/10;
Dig:= rem(0);
Cnt(0):= Cnt(0)+1;
if Num then NumOut(Num);
Cnt(0):= Cnt(0)-1;
ChOut(0, Dig+^0);
if rem(Cnt(0)/3)=0 & Cnt(0) then ChOut(0, ^,);
];

func IsPrime(N);        \Return 'true' if odd N > 2 is prime
int  N, I;
[for I:= 3 to sqrt(N) do
    [if rem(N/I) = 0 then return false;
    I:= I+1;
    ];
return true;
];

int StrongCnt, WeakCnt, StrongCnt0, WeakCnt0, Strongs(36), Weaks(37);
int N, P0, P1, P2, T;
[StrongCnt:= 0;  WeakCnt:= 1;
Weaks(0):= 3;
N:= 7;  P1:= 3;  P2:= 5;        \handles unique case where (2+5)/2 = 3.5
repeat  if IsPrime(N) then
            [P0:= P1;  P1:= P2;  P2:= N;
            T:= (P0+P2)/2;
            if P1 > T then
                [if StrongCnt < 36 then Strongs(StrongCnt):= P1;
                StrongCnt:= StrongCnt+1;
                ];
            if P1 < T then
                [if WeakCnt < 37 then Weaks(WeakCnt):= P1;
                WeakCnt:= WeakCnt+1;
                ];
            ];
        if P1 < 1_000_000 then
            [StrongCnt0:= StrongCnt;  WeakCnt0:= WeakCnt];
        N:= N+2;
until   P1 >= 10_000_000;

Text(0, "First 36 strong primes:^M^J");
for N:= 0 to 36-1 do
    [NumOut(Strongs(N));  ChOut(0, ^ )];
Text(0, "^M^JStrong primes below 1,000,000: ");
NumOut(StrongCnt0);
Text(0, "^M^JStrong primes below 10,000,000: ");
NumOut(StrongCnt);
Text(0, "^M^JFirst 37 weak primes:^M^J");
for N:= 0 to 37-1 do
    [NumOut(Weaks(N));  ChOut(0, ^ )];
Text(0, "^M^JWeak primes below 1,000,000: ");
NumOut(WeakCnt0);
Text(0, "^M^JWeak primes below 10,000,000: ");
NumOut(WeakCnt);
CrLf(0);
]

  

You may also check:How to resolve the algorithm Determine if a string is collapsible step by step in the Python programming language
You may also check:How to resolve the algorithm Old lady swallowed a fly step by step in the PicoLisp programming language
You may also check:How to resolve the algorithm Rosetta Code/Find unimplemented tasks step by step in the Clojure programming language
You may also check:How to resolve the algorithm Colour bars/Display step by step in the Wren programming language
You may also check:How to resolve the algorithm Hello world/Text step by step in the Ela programming language