52 lines
980 B
Text
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
|