RosettaCodeData/Task/Prime-decomposition/ALGOL-M/prime-decomposition.alg
2023-07-01 13:44:08 -04:00

52 lines
980 B
Text

BEGIN
INTEGER I, K, NFOUND;
INTEGER ARRAY FACTORS[1:16];
COMMENT - RETURN P MOD Q;
INTEGER FUNCTION MOD (P, Q);
INTEGER P, Q;
BEGIN
MOD := P - Q * (P / Q);
END;
COMMENT
FIND THE PRIME FACTORS OF N AND STORE IN THE EXTERNAL
ARRAY "FACTORS", RETURNING THE NUMBER FOUND. IF N IS
PRIME, IT WILL BE STORED AS THE FIRST AND ONLY FACTOR;
INTEGER FUNCTION PRIMEFACTORS(N);
INTEGER N;
BEGIN
INTEGER P, COUNT;
P := 2;
COUNT := 1;
WHILE N >= P * P DO
BEGIN
IF MOD(N, P) = 0 THEN
BEGIN
FACTORS[COUNT] := P;
COUNT := COUNT + 1;
N := N / P;
END
ELSE
P := P + 1;
END;
FACTORS[COUNT] := N;
PRIMEFACTORS := COUNT;
END;
COMMENT -- EXERCISE THE ROUTINE;
FOR I := 77 STEP 2 UNTIL 99 DO
BEGIN
WRITE(I,":");
NFOUND := PRIMEFACTORS(I);
COMMENT - PRINT OUT THE FACTORS THAT WERE FOUND;
FOR K := 1 STEP 1 UNTIL NFOUND DO
BEGIN
WRITEON(FACTORS[K]);
END;
END;
END