|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Oct 2006
Messaggi: 170
|
C: numero primo
chi mi scrive un semplice algoritmo per vedere se un numero è primo oppure no?
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Il piu famoso e anche semplice è il crivello di eratostene. http://it.wikipedia.org/wiki/Crivello_di_Eratostene
Se ti serve un esempio in qualche linguaggio basta chiedere. ciao |
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Oct 2006
Messaggi: 170
|
Il punto è che non mi serve per vedere se una serie di numeri è primi, ma voglio sapere dato n da input, dire se questo è primo. il linguaggio è C.
grAZIE |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Il modo più semplice è controllare che non sia divisibile per nessuno dei numeri dispari da 3 alla radice quadrata del numero che stai controllando.
Non esistono algoritmi efficienti per risolvere questo problema.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#5 |
|
Bannato
Iscritto dal: Oct 2006
Messaggi: 170
|
per questa volta mi posteresti direttamente un algoritmo abbastanza buono per fare quello che ho detto?
|
|
|
|
|
|
#6 | |
|
Member
Iscritto dal: May 2006
Messaggi: 71
|
Quote:
Per guadagnare un po' in efficienza, conviene sfruttare il fatto che tutti i numeri primi (tranne 2 e 3) sono della forma: 6*K +/- 1, calcolando: r = N mod 6 Se r e' diverso da 1 o 5, il numero NON e' primo. Poi si prosegue come hai indicato... Ciao ! |
|
|
|
|
|
|
#7 |
|
Bannato
Iscritto dal: Oct 2006
Messaggi: 170
|
Vi sto chiedendo per favore di postarmi direttamente la codifica in C.
graZIE |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2006
Città: TV-PD
Messaggi: 741
|
te la saprei fare in pascal, ma non in C..
|
|
|
|
|
|
#9 |
|
Bannato
Iscritto dal: Oct 2006
Messaggi: 170
|
Allora me la fai in pascal? poi traduco io. grazie tanto
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2006
Città: TV-PD
Messaggi: 741
|
dammi 10 min..
dopo me lo posti tradotto così mi imparo un po' di C |
|
|
|
|
|
#11 | |
|
Member
Iscritto dal: May 2006
Messaggi: 71
|
Quote:
Pero' in VB o VBA e': Codice:
Function IsPrime(N As Long) As Boolean
Dim r As Long
If N <= 0 Then Err.Raise 5, "IsPrime", "Argomento errato !"
If N <= 3 Then
IsPrime = True
Else
r = N Mod 6
If r = 1 Or r = 5 Then
For r = 3 To Sqr(N) Step 2
If (N Mod r) = 0 Then Exit Function
Next
IsPrime = True
End If
End If
End Function
Ciao ! EDIT: come giustamente fatto notare, 1 NON E' primo !! Basterebbe una piccola modifica alla routine, ma a questo punto conviene riscriverla col costrutto Select, piu' efficiente: Codice:
Public Function IsPrime(n As Long) As Boolean
Dim r As Long
Select Case n
Case Is < 0: Err.Raise 5, "IsPrime", "Argomento errato !"
Case 0, 1: 'niente, non sono primi
Case 2, 3: IsPrime = True
Case Else
r = n Mod 6
If r = 1 Or r = 5 Then
For r = 3 To Sqr(n) Step 2
If (n Mod r) = 0 Then Exit Function
Next
IsPrime = True
End If
End Select
End Function
Ultima modifica di icecube_HU : 23-11-2006 alle 09:45. |
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2006
Città: TV-PD
Messaggi: 741
|
avevo quasi finito in pascal, ma visto che ti è arrivata la soluzione in vb lascio quella che è fatta meglio ^^
|
|
|
|
|
|
#13 |
|
Bannato
Iscritto dal: Oct 2006
Messaggi: 170
|
Grazie a tutti.
|
|
|
|
|
|
#14 |
|
Bannato
Iscritto dal: Oct 2006
Messaggi: 170
|
una sola cosa. cosa vuol dire step 2, che incrementa di 2 il contatore?
|
|
|
|
|
|
#15 | |
|
Member
Iscritto dal: May 2006
Messaggi: 71
|
Quote:
|
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Apr 2006
Città: TV-PD
Messaggi: 741
|
potresti incollare la tua traduzione in C? sono curioso di sapere come hai fatto a tradurre l'incremento di 2..
un altra cosa, cosa vuol dire err raise? |
|
|
|
|
|
#17 | |
|
Member
Iscritto dal: May 2006
Messaggi: 71
|
Quote:
Lo stesso che avviene, ad esempio, per la funzione standard Log(). |
|
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#19 | |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16213
|
Quote:
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
|
|
#20 |
|
Bannato
Iscritto dal: Oct 2006
Messaggi: 170
|
int is_prime(int a){
long r; if (a==0){ return 0; } if (a<=3){ return 1; } else { r=a % 6; if ((r==1) || (r==5)){ for (r=3;r<=sqrt(a);r=r+2){ if ((a % r) == 0){ return 1; } else { return 0; } } } } } ritorna 1 se è primo, zero se non lo è. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:08.


















