ho ripescato i sorgenti in C++ per:
Fattorizzare 3 numeri interi e trovare MCD e mcm:

codice:
#include <iostream.h>

int MCD(int, int, int);
int mcm(int, int, int);
void fact(int, int*, int);

int main() {
	int a,b,c;
	bool is;
	int co = 0;

cout << "Tre numeri interi:\n";
cin >> a;
cin >> b;
cin >> c;

int numfirst[5000];
for(int i = 2; i < 5000; i++) {
	is = true;
for(int j = 2; j < i/2; j++)
if((i%j) == 0) is = false;

		if(is) 
			numfirst[co] = i;
			co++;
}

fact(a, numfirst, co);
fact(b, numfirst, co);
fact(c, numfirst, co);

cout << endl;
cout << "\nmcm(" << a << ", " << b << ", " << c << ")" << " = " << mcm(a, b, c) << endl;
cout << "MCD(" << a << ", " << b << ", " << c << ")" << " = " << MCD(a, b, c) << endl << endl;

cout << "Premi un tasto per uscire: ";
char exit;
cin >> exit;

return 0;

}

int mcm(int a, int b, int c) {
	for(int mcm = 2; ; mcm++) {
		if(mcm % a == 0 && mcm % b == 0 && mcm % c == 0) break;
	}
	return mcm;
}

int MCD(int a, int b, int c) {
	int max;
	if(a > b && a > c) max = a;
	else if(b > a && b > c) max = b;
	else if(c > a && c > b) max = c;
for(int MCD = max; ; MCD--) {
		if(a % MCD == 0 && b % MCD == 0 && c % MCD == 0) break;
	}
	return MCD;
}

void fact(int num, int* numfirst, int co) {
	cout << endl;
	int now = num;
    for(int n = 0; n <= co; ) {
	if(now % numfirst[n] == 0) {
		cout << endl << now << ":";
		cout << numfirst[n] << "\r";
		now /= numfirst[n];
		n = 0;
	}
	else n++;
   }
}
Non è commentato, se ti serve lo faccio.

L'esempio per fattorizzare non è male, sennò c'è quello in qbasic del labirinto, nella realtà per uscire da un labirinto, se c'è un uscita, basta mettere la mano destra sul muro destro e camminare senza mai staccare la mano, sapendo questo si potrebbe fare il programma, ecco un esempio non fatto da me, se conosci qbasic potresti provare a tradurre questo:

codice:
100 'LABIRINT: crea un labirinto, e lo risolve
110 '
120 DEFINT A-Z 'Tutte variabili intere per velocit…
130 '
140 ' - Dichiarazioni e costanti -
150 '
160 SCR = 2 'Dati per SCREEN usato
170 DIMX = 640
180 DIMY = 200
190 NCASX = 30 'Numero caselle del labirinto
200 NCASY = 16
210 DIM L(NCASX, NCASY, 4)'4 connessioni per casella (a,s,b,d),+esplorata (0)
220 DIM SX(NCASX * NCASY)'Stack caselle, sovradimensionato per sicurezza
230 DIM SY(NCASX * NCASY)
240 DIM D(4) 'Direzioni possibili da una certa casella
250 DIM DX(4), DY(4)'Differenza in x ed y nella direzione indicata
260 DX(1) = 0: DY(1) = -1 'Verso l'alto
270 DX(2) = -1: DY(2) = 0 'Verso sinistra
280 DX(3) = 0: DY(3) = 1 'Verso il basso
290 DX(4) = 1: DY(4) = 0 'Verso destra
300 DIM DI(4) 'Direzione inversa
310 DI(1) = 3: DI(2) = 4: DI(3) = 1: DI(4) = 2
320 CR$ = CHR$(13) 'Return
330 '
340 ' - Main -
350 '
360 RANDOMIZE TIMER
370 KEY OFF: SCREEN SCR
380 FINITO = 0: WHILE NOT FINITO
390   CLS : LOCATE 1, 9: PRINT "- Labirinto ricorsivo -";
400   PRINT " di Giacomo Zorzi -";
410   GOSUB 540 'Calcola dimensioni e posizione labirinto
420   GOSUB 640 'Prepara array con bordo circostante
430   GOSUB 850 'Disegna reticolo iniziale
440   GOSUB 980 'Crea labirinto
450   GOSUB 1350 'E lo risolve
460   A$ = "Ho trovato l'uscita (Return per smettere, Spazio per un altro): "
470   GOSUB 1660: IF C$ = CR$ THEN FINITO = -1
480 WEND
490 SCREEN 0: CLS
500 END
510 '
520 ' - Calcola dimensioni caselle e posizione labirinto -
530 '
540 DCX = DIMX \ (NCASX + 2)'Dimensione X, bordi laterali pari a 2 caselle
550 DCY = (DIMY - 4 * (DIMY \ 25)) \ NCASY'Dimensione Y, con spazio per 4 linee
560 X0 = (DIMX - NCASX * DCX) \ 2'Posizione dell'angolo superiore sinistro
570 Y0 = 2 * (DIMY \ 25)
580 XENTRA = 1 + INT(NCASX * RND)'Posizione entrata
590 XESCE = 1 + INT(NCASX * RND)'E uscita
600 RETURN
610 '
620 ' - Prepara array L() inizializzato a zero, tranne i bordi -
630 '
640 FOR X = 1 TO NCASX 'Azzera tutti i collegamenti
650   FOR Y = 1 TO NCASY
660     FOR I = 0 TO 4 'Lo zero indica se Š stata esplorata
670       L(X, Y, I) = 0
680     NEXT I
690   NEXT Y
700 NEXT X
710 Y = 1 'Bordo superiore
720 FOR X = 1 TO NCASX: L(X, Y, 1) = -1: NEXT X'Non si passa verso l'alto
730 Y = NCASY 'Bordo inferiore
740 FOR X = 1 TO NCASX: L(X, Y, 3) = -1: NEXT X'Non si passa verso il basso
750 X = 1 'Bordo sinistro
760 FOR Y = 1 TO NCASY: L(X, Y, 2) = -1: NEXT Y'Non si passa verso sinistra
770 X = NCASX 'Bordo destro
780 FOR Y = 1 TO NCASY: L(X, Y, 4) = -1: NEXT Y'Non si passa verso destra
790 L(XENTRA, NCASY, 3) = -2'Entrata
800 L(XESCE, 1, 1) = -3'E uscita
810 RETURN
820 '
830 ' - Disegna reticolo iniziale -
840 '
850 FOR X = X0 TO X0 + DCX * NCASX STEP DCX'Linee verticali
860   LINE (X, Y0)-(X, Y0 + NCASY * DCY)
870 NEXT X
880 FOR Y = Y0 TO Y0 + DCY * NCASY STEP DCY'Linee orizzontali
890   LINE (X0, Y)-(X0 + NCASX * DCX, Y)
900 NEXT Y
910 Y = Y0 + NCASY * DCY'Aggiunge entrata e uscita
920 LINE (X0 + (XENTRA - 1) * DCX + 1, Y)-STEP(DCX - 2, 0), 0'Con una linea nera
930 LINE (X0 + (XESCE - 1) * DCX + 1, Y0)-STEP(DCX - 2, 0), 0
940 RETURN
950 '
960 ' - Crea labirinto -
970 '
980 A$ = "Premi Return per creare un labirinto: ": GOSUB 1660
990 X = XENTRA: Y = NCASY 'Parte dall'entrata
1000 LIV = 0 'Contatore di livello per stack
1010 FATTO = 0: WHILE NOT FATTO 'Ciclo pseudo-ricorsivo
1020   L(X, Y, 0) = 1'La casella corrente Š gi… stata esplorata
1030   ND = 0 'Prepara array D() con le ND direzioni possibili
1040   FOR I = 1 TO 4
1050     IF L(X, Y, I) <> 0 GOTO 1070'Direzione gi… collegata
1060       IF L(X + DX(I), Y + DY(I), 0) = 0 THEN ND = ND + 1: D(ND) = I'Inesplorata
1070   NEXT I
1080   IF ND = 0 GOTO 1180 'Esegue linee seguenti se ci sono direzioni libere
1090     D = D(1 + INT(ND * RND))'Sceglie una direzione a caso tra quelle libere
1100     L(X, Y, D) = 1'Si collega con la casella adiacente
1110     AX = X + DX(D): AY = Y + DY(D)'Di cui calcola le coordinate
1120     L(AX, AY, DI(D)) = 1'E la collega con s‚ stessa
1130     GOSUB 1260 'Abbatte la parete
1140     LIV = LIV + 1'Salva nello stack la casella corrente
1150     SX(LIV) = X: SY(LIV) = Y
1160     X = AX: Y = AY 'Si sposta sulla casella adiacente
1170   GOTO 1210 'Esegue linee seguenti se non ci sono direzioni libere
1180     X = SX(LIV): Y = SY(LIV) 'Riprende casella precedente dallo stack
1190     LIV = LIV - 1
1200     IF LIV = -1 THEN FATTO = -1'Esaurito lo stack, il labirinto Š finito
1210 WEND
1220 RETURN
1230 '
1240 ' - Abbatte visivamente una parete dalla cella X,Y nella direzione D -
1250 '
1260 XC = X0 + (X - 1) * DCX: YC = Y0 + (Y - 1) * DCY'Angolo superiore sinistro cella
1270 IF D = 1 THEN LINE (XC + 1, YC)-STEP(DCX - 2, 0), 0
1280 IF D = 2 THEN LINE (XC, YC + 1)-STEP(0, DCY - 2), 0
1290 IF D = 3 THEN LINE (XC + 1, YC + DCY)-STEP(DCX - 2, 0), 0
1300 IF D = 4 THEN LINE (XC + DCX, YC + 1)-STEP(0, DCY - 2), 0
1310 RETURN
1320 '
1330 ' - Risolve labirinto -
1340 '
1350 A$ = "Premi Return per risolverlo, Spazio se lo vuoi al rallentatore: "
1360 GOSUB 1660: LENTO = (C$ = " ")'Attiva rallentatore se battuto spazio
1370 X = XENTRA: Y = NCASY 'Parte dall'entrata
1380 LIV = 0 'Contatore di livello per stack
1390 RISOLTO = 0: WHILE NOT RISOLTO 'Ciclo pseudo-ricorsivo
1400   L(X, Y, 0) = 2'La casella corrente Š gi… stata esplorata
1410   PSET (X0 + X * DCX - DCX \ 2, Y0 + Y * DCY - DCY \ 2)'La marca con un puntino
1420   IF LENTO THEN PLAY "p16" 'Ritardo se va al rallentatore
1430   ND = 0 'Prepara array D() con le ND direzioni possibili
1440   FOR I = 1 TO 4
1450     C = L(X, Y, I)'Collegamento nella direzione data
1460     IF C = -3 THEN RISOLTO = -1: I = 5: GOTO 1490'Ha trovato l'uscita
1470     IF C <> 1 GOTO 1490'Direzione non valida
1480       IF L(X + DX(I), Y + DY(I), 0) = 1 THEN ND = ND + 1: D(ND) = I'Inesplorata
1490   NEXT I
1500   IF RISOLTO GOTO 1610 'Se ha trovato l'uscita, ha finito
1510     IF ND = 0 GOTO 1580 'Esegue linee seguenti se ha direzioni libere
1520       D = D(1 + INT(ND * RND))'Sceglie direzione a caso tra quelle libere
1530       AX = X + DX(D): AY = Y + DY(D)'Di cui calcola le coordinate
1540       LIV = LIV + 1'Salva nello stack la casella corrente
1550       SX(LIV) = X: SY(LIV) = Y
1560       X = AX: Y = AY 'Si sposta sulla casella adiacente
1570     GOTO 1610 'Esegue linee seguenti se non ci sono direzioni libere
1580       PRESET (X0 + X * DCX - DCX \ 2, Y0 + Y * DCY - DCY \ 2)'Toglie il puntino
1590       X = SX(LIV): Y = SY(LIV) 'Riprende casella precedente dallo stack
1600       LIV = LIV - 1
1610 WEND
1620 RETURN
1630 '
1640 ' - Messaggio A$ sull'ultima linea, aspetta Return o spazio in C$ -
1650 '
1660 LOCATE 24, 4: PRINT A$;
1670 WHILE INKEY$ <> "": WEND'Pulisce buffer di tastiera
1680 LOCATE , , 1'Mostra cursore utente
1690 OK = 0: WHILE NOT OK
1700   C$ = INPUT$(1)
1710   IF C$ = CR$ OR C$ = " " THEN OK = -1 ELSE BEEP
1720 WEND
1730 LOCATE , , 0'Nasconde cursore utente
1740 LOCATE 24, 1: PRINT SPACE$(79); 'Ripulisce la linea
1750 RETURN