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.

Divisori fino a radice quadrata di N ES2

DRDLCN (8070 points)
28 68 104
in Es2 by (8.1k points)
closed by
In termini di tempo non conviene cercare i divisori da 0 a N

Potrei cercarli da 0 a N/2 ma cosi è ancora molto lenta come ricerca

Ho letto che si possono cercare da 0 fino a sqrt(N) come è possibile?
628 views
closed with the note: answered

2 Answers

Best answer
p
pietrobrega (4460 points)
6 13 42
by (4.5k points)
selected by
Si è possibile ma ad ogni ciclo devi salvarti sia il numero che N/numero. Così ottieni due divisori ad ogni ciclo solo che poi devi eliminare gli eventuali doppioni...oppure li inserisci direttamente in un insieme così non c'è questo problema.
DRDLCN (8070 points)
28 68 104
by (8.1k points)
Puoi spiegarti meglio sulla parte "poi devi eliminare eventuali doppioni" gentilmente?
p
pietrobrega (4460 points)
6 13 42
by (4.5k points)
Si mi sono spiegato male...intendevo dire che applicando questo metodo si genera due volte uno stesso numero. Ti faccio un esempio:
divisori(16)
[1,16,2,8,4,4]
Come puoi vedere nell'output il 4 compare due volte perchè nell'ultimo ciclo svolto viene aggiunta alla lista sia 4 che 16/4 =4.
Un modo per risolvere questo problema è inserire il tutto in un set così da eliminare i doppioni...oppire eliminarli in altro modo dalla lista.
Spero di essere stato più chiaro...
alessioclemente (19640 points)
19 67 153
by (19.6k points)
Io l'ho fatto cosi. Ma i divisori non escono ordinati. Es ( 2,4,6,9). Ad ogni iterazione controlli se il numero modulo i da 0 e controlli anche per numero fratto i.
alessioclemente (19640 points)
19 67 153
by (19.6k points)
Con un controllo se è diverso da i
l
leoli (2930 points)
0 5 19
by (2.9k points)
Se il numero i è un divisore di n anche n/i lo è (senza bisogno di controllare due volte) -> i*n/i = n