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;