Pagina dedicata alla codifica in Php della scomposizione in fattori primi di un numero intero.
Risorse collegate
Per una spiegazione dettagliata della codifica in Php, vi rimando a
Analisi fatta in un altro articolo (che deve essere letto perché è propedeutico al contenuto di questo articolo)
la funzione sqrt per estrarre la radice quadrata di un numero N
la funzione microtime con il parametro True che mi restituisce un numero float che misura il numero di secondi passati dall'epoca di Linux; questo numero ha anche una parte decimale con una precisione fino a 13 cifre; questa parte frazionaria, moltiplicata per un milione, mi darà il numero di microsecondi trascorsi dall'inizio alla fine dello script. Infatti, se faccio la differenza fra il tempo misurato alla fine e il tempo misurato all'inizio dello Script, avrò misurato quanto tempo lo script impiega per l'esecuzione.
la funzione modulo per il calcolo del resto fra N e k
il tag html <H1>
il tag html <sup>
ma apporteremo una leggera modifica che consentirà di migliorare ulteriormente l'efficienza dell'algoritmo.
La modifica scaturisce dall'osservazione che, tranne il due, tutti i fattori primi di una scomposizione sono dispari.
Dunque, richiamando la funzione conta_esponente, si prova a dividere per due. La funzione conta_esponente restituisce un numero intero che indica quante volte il numero due appare nella scomposizione di N. Se il numero restituito dalla funzione è diverso da 0, allora si visualizza 2 elevato al numero
$kexp=conta_esponente($N,2);
if($kexp!=0){
echo "2<sup>$kexp<sup> ";
}
Poi usiamo un ciclo che prenda in considerazione solo i numeri dispari, facendo partire da 3 la variabile $k che controllerà il ciclo e aumentandola di 2 ad ogni giro. All'interno del ciclo, sarà richiamata la funzione conta_esponente($N, $k).
$k=3;
while($k<=sqrt($N)){
$kexp=conta_esponente($N,$k);
if($kexp!=0){
echo "$k<sup>$kexp<sup> ";
}
$k+=2;
}
Addentriamoci adesso nella funzione conta_esponente. Essa prenderà in input due parametri: N, numero da scomporre, passato come riferimento e d possibile divisore. La variabile N viene passata per riferimento perché sarà modificata nella funzione e il programma chiamante dovrà tener conto dell'evoluzione del suo valore. Il valore restituito dalla funzione sarà un numero intero maggiore o uguale a zero. Per esempio, nella scomposizione del numero 120 = 23 * 3 * 5 dopo aver richiamato conta_esponenti(120, 2), N sarà diventato 15 (3*5) e il valore restituito sarà 3 (esponente di 23): se quest'ultimo è zero, significa che d non divide N mentre se è maggiore di zero indicherà quante volte d divide N.