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;
}

function

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.