|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Apr 2004
Messaggi: 364
|
Numero primo
Salve ragazzi sto facendo una funzione in C++ che mi calcoli se un numero è primo, oppure no. Ho usato un metodo iterativo, che controlla il numero per quali numeri è divisibile, partendo da 2 fino ad arrivare al numero stesso. Questa maniera piò risultare efficace se il numero in questione è piccolo, ma è una soluzione lentissima se il numero è grande. Comunque posto la mia funzione, in attesa che qualcuno mi voglia dare una mano.
bool calcolo(int n) { for (int j=2; j<n; j++) { if (!n%j) return false; } return true; } |
![]() |
![]() |
![]() |
#2 | |
Member
Iscritto dal: Nov 2002
Messaggi: 250
|
Puoi modificare il ciclo for così:
Quote:
![]() |
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Jun 2002
Città: Firenze
Messaggi: 630
|
Quote:
Comunque, inserisci le keywords "primality algorythm" o "primality algorithm". Per tornare all'atto pratico, puoi dimezzare il tempo del tuo algoritmo riducendo il ciclo fino a n/2... tanto è uguale! (Edit: Zhurlo è arrivato prima di me...) Un algoritmo storico è il "crivello di Eratostene", ideato nel 240 a.C. http://www.vialattea.net/esperti/mat/primi/crivell.html
__________________
---> Lombardp CSS Certified Expert (Master Level) at Experts-Exchange Proud user of LITHIUM forum : CPU technology Webmaster of SEVEN-SEGMENTS : Elettronica per modellismo |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
C'è tutta una teoria matematica dietro che non ti immagini nemmeno
![]() Tempo fa c'eravamo messi tutti a cercare un modo un po' più veloce per generare in numeri primi fra 1 e N...ma ti assicuro che è un bel casotto... Tanto per cominciare...non importa calcolare il for con il limite di n...ma basta limitare la ricerca a sqrt(n)... int lim = sqrt(n); for (int j=2; j<=lim; j++) Infatti se esiste m > lim tale che n è divisibile per m, allora n = m * q, ma ciò implica q < lim...quindi se n non fosse primo lo avresti già scoperto testando q... |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
#6 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ah, mi ero dimenticato:
if (!n%2) return false; int lim = sqrt(n); for (int j=3; j<lim; j+=2) { if (!n%j) return false; } |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
|
mi raccomando non scoprite maniere troppo efficienti perchè altrimenti ritorniamo al medioevo della crittografia
![]() ![]() |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#11 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() *INCREDIBILE, STO PENSANDO!!!* sqrt(pow(x, 6)) == pow(x, 3); ecco, questo mi torna! ![]() quanto fa radice quadrata di x alla 6? x alla 3! lei mi cade sulle basi signor cionci... ![]() |
|
![]() |
![]() |
![]() |
#12 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
esempio pratico: prendiamo x uguale che ne so, 3!
3 alla 6 = 729 3 alla 3 = 27 radice di 3 alla 6 = 27 3 alla 3 = radice di 3 alla 6 cvd ![]() |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
![]() Ultima modifica di cionci : 15-04-2005 alle 09:18. |
|
![]() |
![]() |
![]() |
#14 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() ![]() ![]() ![]() che figura... ![]() ![]() |
|
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
me la ricordo la discussione del crivello di eratostene!
![]() ![]() ![]() bellissima!!! ![]()
__________________
![]() |
![]() |
![]() |
![]() |
#16 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() il mio ce l'ho ancora se volete ![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:52.