Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

Dubbio su i numeri primi

restante.giuseppe (2480 points)
7 32 49
in Es1 by (2.5k points)
closed by
Buonasera e tutti,
volevo abbassare ancora di più il tempo di esecuzione del mio primo esercizio, mi ricordavo che di N non possono esistere divisori primi > N**0.5 , ma ho notato che non è propriamente vero.

Sto sbagliando qualcosa o ricordo bene?
564 views
closed with the note: Answered

4 Answers

Best answer
split (8700 points)
21 59 79
by (8.7k points)
selected by
no infatti non è vero... ma prendi un esempio

115 lo dividi per due e non va, poi per 3 e non va...fino a 5

quando lo dividi per 5 diventa 23, che è maggiore della radice, ma se noti bene, 23 che numero è?

in generale, se un fattore primo è maggiore della radice non può esistere UN ALTRO fattore primo maggiore della radice

questo perché per la scomposizione un numero deve essere uguale al prodotto di tutti i suoi fattori primi, quindi se ho a b c d come fattori, tutti a esponente 1 e la radice è b<rad<c va da se che c*d da un numero maggiore del numero di partenza, e quindi è impossibile
restante.giuseppe (2480 points)
7 32 49
by (2.5k points)
grazie mille hai risolto il mio problema =)
gianpcr (4620 points)
5 16 34
by (4.6k points)
Ciao, cosa ti ha fatto notare che non è propriamente vero? Un metodo per diminuire il tempo di esecuzione è quello di salvarti in una lista tutti i numeri primi che calcoli ogni volta che richiami la funzione, così che alla prossima chiamata della funzione, prima di controllare se è primo verifichi se è già presente nella tua lista, evitando quindi calcoli inutili.
restante.giuseppe (2480 points)
7 32 49
by (2.5k points)
per esempio 8640829 la sua radice è 2939,52 ma un suo divisore primo è 3739
gianpcr (4620 points)
5 16 34
by (4.6k points)
Certo ma comunque ti interessa trovarne uno che non sia uguale ad 1 o se stesso (in questo caso 8640829). Infatti tra i divisori di 8640829 trovi 2311 che è minore della radice del numero e ti consente di stabilire se il numero è primo o meno
andrea.sterbini (207940 points)
756 1270 2377
by (208k points)
guardate che per punizione vi faccio scrivere 1000 volte alla lavagna "divisore *proprio*"  :)
francesco.dev (33560 points)
22 51 129
by (33.6k points)

Ciao!

La tua affermazione è più che giusta ed è vera, cosa ti fa venire dei dubbi??
Ricorda ovviamente che tale concetto va sfruttato con altri piccoli meccanismi per ridurre il tempo d'esecuzione!

- Francesco Pio Scognamiglio

andrea.sterbini (207940 points)
756 1270 2377
by (208k points)

Qui non stiamo cercando i divisori primi, ma i divisori propri.

restante.giuseppe (2480 points)
7 32 49
by (2.5k points)
edited by
sisi professore, mi è venuto in mente un algoritmo, molto più lungo ed intricato, ma più efficente per trovare il numero dei divisori propri tramite i numeri primi
restante.giuseppe (2480 points)
7 32 49
by (2.5k points)
in questo modo invece che 2/3 secondi per i numeri grandi ho lo stesso risultato in 0.14 secondi