|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
[C] Problemi sui numeri primi
Ciao a tutti!
![]() Allora il testo mi dice costruire una funzione int is_prime(int n) che restituisce 1 se il numero n è primo 0 altrimenti. Fino a qui ok. Ma lui mi da un suggerimento dicendomi che se ke n sono interi positivi, k divide n se e solo se n%k vale zero. Quello che non capisco è che se la funzione riceve solamente n come parametro che valore dovrebbe assumere k? E da dove se lo va a pigliare sto k? Poi di problema ce n'è un altro che dice di scrivere una funzione che trovi tutti i fattori di una dato numero. E qui proprio sono a corto di idee. Come faccio a dirglielo? Grazie ancora per il vostro prezioso aiuto. |
![]() |
![]() |
![]() |
#2 | |||
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
Quote:
Quote:
(Se ho capito bene, è ancora prestino per le liste.) P.S.: Su che libro stai studiando?
__________________
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 |
|||
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Il testo è: Al Kelley - Ira Pohl - Didattica e Programmazione C - Addison/Wesley Pearson
Cmq non ho ben capito "usa i cicli e le variabili locali". k da dove esce fuori? Se non ha un valore prefissato (o che cmq gli passo io da un'altra funzione) come fa un numero fissato n e essere divisibile per un ipotetico numero k. Lui non sa che valore ha k quindi come fa a stabilire se è primo no? Spero di essermi spiegato. Ultima modifica di Manugal : 25-06-2005 alle 17:41. |
![]() |
![]() |
![]() |
#4 |
Junior Member
Iscritto dal: Jun 2005
Messaggi: 13
|
Codice:
int main () { int numero; int div, i; printf ("Inserisci il numero\n"); scanf ( "%d", &numero ); div = numero; for ( i = 2; div > 1; ) { if (! ( div % i ) ) { printf ( "%d --> %d e' divisibile per %d e resta %d\n", numero, div, i, div/i ); div /= i; continue; } i ++; } return 0; } |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
|
non mi ricordo bene ma se non ricordo male un mio compagno aveva trovato che bastava andare fino a log del numero
![]() ![]() ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
![]() |
![]() |
![]() |
#6 | ||
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
Quote:
E qui mi fermo, perché adesso è ora che ti impratichisca un po' tu ![]()
__________________
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 |
||
![]() |
![]() |
![]() |
#7 | |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
Meglio di così non puoi fare, i controesempi sono i quadrati dei primi. ESERCIZIO: dimostrare, che è facile ![]()
__________________
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 |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Forse ci sono.
Potrei fare un ciclo for con k che va da 2 a n (n escluso) e vedere se per ogni k n è divisibile per quel k. Se non lo è è primo. E' giusto? |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
ciao ![]() |
|
![]() |
![]() |
![]() |
#10 | |
Junior Member
Iscritto dal: Jun 2005
Messaggi: 13
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
#12 | |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
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 |
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Giusto...basta fare qualche operazione sul contatore...
|
![]() |
![]() |
![]() |
#14 |
Member
Iscritto dal: Mar 2004
Città: Milano
Messaggi: 107
|
già magari riesci anche a trovare i fattori di un numero in tempo costante o al più polinomiale
![]() ![]() ![]() ah chiaramente invece per trovare se un numero è primo o meno... quello è facile... da qualche anno ![]()
__________________
Non c'è la morte... c'è la Forza... Ultima modifica di Maephisto : 27-06-2005 alle 10:13. |
![]() |
![]() |
![]() |
#15 | |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Quote:
for (k=2; k<n; k++) if(k%n) return 0; else return 1; Non mi sembra che sia proprio uguale al tuo (anche perché il tuo non l'ho proprio capito ![]() ![]() |
|
![]() |
![]() |
![]() |
#16 | |
Member
Iscritto dal: Feb 2005
Città: Milano
Messaggi: 35
|
Quote:
![]() Inoltre non pretendere di risolvere un problema senza aver ben chiaro di cosa si tratta, i numeri dispari non sono i numeri primi. Buon lavoro, ci sono passato anch'io ![]()
__________________
Res ipsa loquitur |
|
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Scusa però ti dico che il mio funziona perché se metto 9 come valore (che è dispari ma non è primo) la funzione mi restituisce correttamente 0. Qundi che ha di sbagliato il mio ciclo?
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Cmq sto provando lo stesso a vedere quel codice scritto gentilmente da n0ps:
Codice:
int main () { int numero; int div, i; printf ("Inserisci il numero\n"); scanf ( "%d", &numero ); div = numero; for ( i = 2; div > 1; ) { if (! ( div % i ) ) { printf ( "%d --> %d e' divisibile per %d e resta %d\n", numero, div, i, div/i ); div /= i; continue; } i ++; } return 0; } ![]() |
![]() |
![]() |
![]() |
#19 |
Member
Iscritto dal: May 2003
Messaggi: 119
|
La if significa proprio il contrario di quello che dici tu
![]() se il numero è divisibile per i div % i fa 0 il ! è l'operatore booleano not che applicato a 1 espressione booleana la fa diventare false se è vera e vera se è falsa. Siccome il valore 0 corrisponde a un espressione booleana falsa allora !0 = vero quindi if (! ( div % i ) ) è lo stesso che scrivere if ((div % i)==0) div /=i è lo stesso che scrivere div = div /i Quel ciclo trova tutti i fattori primi di un numero, se non facesse quella divisione (a parte che il ciclio non terminerebbe mai) risulterebbe che 12 è divisibile per 2, poi per 2, poi per 3, poi per 4, poi per 6 e poi per 12. Quando l'output giusto è 2 2 3 |
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Ok grazie. Se non avesse messo il continue che sarebbe successo?
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:31.