PROGRAM Factorial (Input,Output);
{Purpose: This program finds the factorial of a number if it is
prime otherwise is lists the factors.  Written in Turbo Pascal v3.0.}

USES CRT;

FUNCTION Prime (Number : INTEGER) : BOOLEAN;
VAR
   Loop : INTEGER;
   Flag : BOOLEAN;
BEGIN
     Flag:=False;
     IF Number<>0 THEN BEGIN
           Loop:=2;
           REPEAT
                 IF (Number MOD Loop=0) THEN Flag:=True;
                 Loop:=Loop+1;
           UNTIL (Loop=Number-1) OR (Flag=True);
           IF Flag=True THEN Prime:=False ELSE Prime:=TRUE;
     END;
     IF Number IN [0,1,3] THEN Prime:=True;
END;{PRIME}

FUNCTION Factorial (Number : INTEGER) : REAL;
VAR
   Loop : INTEGER;
   Total : REAL;
BEGIN
     Total:=1;
     FOR Loop:=2 TO Number DO BEGIN
         Total:=Total*Loop;
     END;
     Factorial:=Total;
END;{Factorial}

PROCEDURE Factors (Number : INTEGER);
VAR
   Loop : INTEGER;
BEGIN
     WRITE(Output,'Factors: ');
     FOR Loop:=1 TO Number DO BEGIN
         IF Number MOD Loop=0 THEN WRITE(Output,' ',Loop);
     END;
     WRITELN(Output);
END;{Factors}

PROCEDURE Main;
VAR
   Number : INTEGER;
BEGIN
     WRITELN(Output,'What is you number?');
     READLN(Input,Number);
     IF Prime(Number) THEN WRITELN(Output,'Factorial:',Factorial(Number))
     ELSE Factors(Number);
END;

BEGIN
Main;
END.
