L’algoritmo ha una complessità troppo alta per risolvere il problema con 100 punti
prova a pensare ad un modo per generare una lista di numeri primi in modo piĂą veloce
Anche io ho effettuato 70/100 un bel po di tempo fa, credo che una possibile velocizzazione sia data dalla riduzione dei numeri i da controllare.
Per esempio supponendo che N =100 quindi t=10 invece di controllare il 2 3 4 5 6 7 8 9 e 10 potresti controllare solo $K$numeri che in questo caso sono 4 giusto? , aumentando N aumenterĂ anche il guadagno di tempo per esempio con N=900, t=30 k=10
Ho riprovato a svolgere il problema ma ottenendo ancora 70/100 , l’algoritmo sostanzialmente prende in input la stringa s e la trasforma in un array di char e successivamente un array di int dove l’asterisco viene rappresentato dal -1 per comodità mia, poi genero la lista dei numeri primi che parte dal numero più piccolo e arriva fino al massimo numero che potrebbe corrispondere es.
3*1 ->300<numeri<400
9*** -> 9000<numeri<10000
La mia lista è creata in questo modo>
Inserisco inizialmente in una lista contenente tutti i numeri primi il numero 2, ed il numero 3,partendo poi dal numero 5 controllo che non sia un multiplo di nessuno dei numeri primi inseriti precedentemente(mi fermo a sqrt(valore)) se non lo è lo inserisco e svolgo lo stesso calcolo
Controllo che il numero inserito possa essere un numero derivato da quello iniziale(senza controllare gli asterischi per il momento ma basandomi soltanto che stia nell’intervallo dei valori possibili), se lo è lo aggiungo all lista dei valori “possibili”
Per ogni elemento della lista controllo che per ogni cifra in posizione i il valore corrisponde alla cifra del numero preso in input, tranne nel caso in cui questa cifra sia un * (-1) e li conto
Questo è il codice , devo capire dove velocizzarlo ma credo nella generazione dei numeri primi , lo migliorei usando il Crivello di Eratostene?
EDIT:: Usando il Crivello di Eratostene si ottiene 100/100