PROGRAM DECOMPOSE ! ! for rosettacode.org ! !VAR NUM,J DIM PF[100] PROCEDURE STORE_FACTOR PF[0]=PF[0]+1 PF[PF[0]]=CA I=I/CA END PROCEDURE PROCEDURE DECOMP(I) PF[0]=0 CA=2 ! special case LOOP IF I=1 THEN EXIT PROCEDURE END IF EXIT IF INT(I/CA)*CA<>I STORE_FACTOR END LOOP FOR CA=3 TO INT(SQR(I)) STEP 2 DO LOOP IF I=1 THEN EXIT PROCEDURE END IF EXIT IF INT(I/CA)*CA<>I STORE_FACTOR END LOOP END FOR IF I>1 THEN CA=I STORE_FACTOR END IF END PROCEDURE BEGIN ! ----- function generate ! in ... I ... number ! out ... PF[] ... factors ! PF[0] ... # of factors ! mod ... CA ... pr.fact. candidate PRINT(CHR$(12);) !CLS INPUT("Numero ",NUM) DECOMP(NUM) PRINT(NUM;"=";) FOR J=1 TO PF[0] DO PRINT(PF[J];) END FOR PRINT END PROGRAM