37 lines
852 B
Text
37 lines
852 B
Text
test: procedure options (main, reorder);
|
|
declare (n, i) fixed binary (31);
|
|
|
|
get list (n);
|
|
put edit ( n, '[' ) (x(1), a);
|
|
restart:
|
|
if is_prime(n) then
|
|
do;
|
|
put edit (trim(n), ']' ) (x(1), a);
|
|
stop;
|
|
end;
|
|
do i = n/2 to 2 by -1;
|
|
if is_prime(i) then
|
|
if (mod(n, i) = 0) then
|
|
do;
|
|
put edit ( trim(i) ) (x(1), a);
|
|
n = n / i;
|
|
go to restart;
|
|
end;
|
|
end;
|
|
put edit ( ' ]' ) (a);
|
|
|
|
is_prime: procedure (n) options (reorder) returns (bit(1));
|
|
declare n fixed binary (31);
|
|
declare i fixed binary (31);
|
|
|
|
if n < 2 then return ('0'b);
|
|
if n = 2 then return ('1'b);
|
|
if mod(n, 2) = 0 then return ('0'b);
|
|
|
|
do i = 3 to sqrt(n) by 2;
|
|
if mod(n, i) = 0 then return ('0'b);
|
|
end;
|
|
return ('1'b);
|
|
end is_prime;
|
|
|
|
end test;
|