-
.
Attenzione però, te hai messo m == 2, nel programma precedente c'è m = 2, poi esegue semplicemente il modulo per vedere se il numero è pari.
Oltretutto ci sono altri errori, come n%m==2. Ti conviene forse far tornare una stringa, al posto di un booleano.. l'ho sistemato ma non te lo posto, voglio che lo sistemi te!
Edit: @lumo: come il programma di Riovandaino
Edited by RootkitNeo - 8/11/2009, 14:33. -
x-reynik-x.
User deleted
Ho provato così ma non funziona non capisco il perché! Se gli metti un numero continua all'infinito a dire: n è primo, n è primo, n è primo.... CODICEdef prime(n):
if n <= 3:
print(n, 'è un numero primo')
m = 2
while m <= (n*m):
if n % m == 0:
print(n, 'non è un numero primo')
m = m + 1,
break
print(n, 'è un numero primo')
Ho provato con il codice di Rootkit Neo e l'ho adeguato a Python 3 e funziona, è perfetto!!!. -
x-reynik-x.
User deleted
CITAZIONE (RootkitNeo @ 7/11/2009, 22:12)Sono riuscito a combinare qualcosaCODICEdef primo(n):
if n%2==0 and n!=2:
print "Il numero ",n," non e primo"
elif n==2:
print n," e primo"
else:
for i in range(3,(n+1)):
if n%i==0 and n!=i:
print n," non e primo il suo primo divisore e ",i,""
break
elif n%i==0:
if n==i:
print n,"e un numero primo"
break
numero = input('Inserisci il numero:')
primo(numero)
è molto simile alla tua, un pò riaggiustata. Se hai bisogno di chiarimenti chiedi, sono qui!!
Non capisco queste parti:
if n%2==0 and n!=2:
if n%i==0 and n!=i:
!= significa diverso e quindi se n è diverso da 2(nel primo caso) dovrebbe essere classificato come non primo! E lo stesso nel secondo caso.. -
.CITAZIONE (x-reynik-x @ 9/11/2009, 16:52)Non capisco queste parti:
if n%2==0 and n!=2:
if n%i==0 and n!=i:
!= significa diverso e quindi se n è diverso da 2(nel primo caso) dovrebbe essere classificato come non primo! E lo stesso nel secondo caso.
Dunque, si leggerebbe "diverso da".
Io nel primo caso dico: se n%2 è uguale a 0 (quindi se la divisione non ha resto), e n!= da 2, e il numero che metto non è 2 il numero non è primo. Esempio: n=4;
if 4%2==0 and 4!=2:
In poche parole verifico solamente che il numero sia un numero pari, ma che sia diverso da 2.
Nel secondo caso invece, if n%i==0 and n!=i:, dico: Se n%i è uguale a 0 (se il resto della divisione è 0) e n!=i il numero non è primo. Questo perchè controllo i numeri dispari (in java avrei messo in modo diverso il ciclo), ovvero, se n=3 e i (che inizia da 3) è uguale ad n (l'uguaglianza si ha al primo ciclo in questo caso) da resto 0 (quindi è divisibile), e n è diverso da i, il numero non è pari. Effettuo il controllo sul diverso da i proprio per controllare che non sto avendo resto 0 solo perchè i numeri sono uguali.CODICEn=3;
i al primo ciclo è 3:
if n diviso i da resto 0, e n è diverso da i, il numero non è primo.
Sotto se noti c'è un elif che controllo se da resto 0,m e appena sotto un if per vedere se sono uguali.
Per finire: se n è uguale a 11 e i è uguale a 11 è ovvio mi dia resto 0, e se i numeri sono uguali è primo!. -
x-reynik-x.
User deleted
Ahh grazie ora sì che ho capito! Grazie mille! . -
.CITAZIONE (x-reynik-x @ 9/11/2009, 17:23)Ahh grazie ora sì che ho capito! Grazie mille!
Figurati!. -
TTDH.
User deleted
CODEdef numero_primo(numero):
numerod = ""
for i in range(2, numero):
if numero % i == 0:
numerod += str(i) + " / "
if numerod != "": return "%s, divisibile per %s" % ("numero non primo", numerod)
else: return "numero primo". -
~{Skydrake™}».
User deleted
CITAZIONE (TTDH @ 9/11/2009, 18:33)CODICEdef numero_primo(numero):
numerod = ""
for i in range(2, numero):
if numero % i == 0:
numerod += str(i) + " / "
if numerod != "": return "%s, divisibile per %s" % ("numero non primo", numerod)
else: return "numero primo"
Mi sembra che questo sia l'algoritmo più pesante in questo topic
Come ho detto precedentemente, basta fare il ciclo da 2 a radice di N, e non da 2 a N
Inoltre, se ti servono tutti i divisori, basta che (sempre nel ciclo da 2 a radice di N) controlli se il numero è divisibile per la variabile contatore. Se lo è, aggiungi ai divisori sia la variabile contatore, sia (N / variabile contatore). -
.
Si esatto!!
Bè comunque postando diverse soluzioni si hanno diversi ragionamenti diciamo, che siano più o meno contorti poco importa.. ma il bello è proprio il fatto che ci si può arrivare in diversi modi!!
Io facendolo simile al suo ho fatto notare a lui qualcosa che non conosceva, che non gli era chiaro... -
~{Skydrake™}».
User deleted
CITAZIONE (RootkitNeo @ 9/11/2009, 22:06)Si esatto!!
Bè comunque postando diverse soluzioni si hanno diversi ragionamenti diciamo, che siano più o meno contorti poco importa.. ma il bello è proprio il fatto che ci si può arrivare in diversi modi!!
Io facendolo simile al suo ho fatto notare a lui qualcosa che non conosceva, che non gli era chiaro..
Certo, è a questo che serve questa sezione. -
.CODICEdef prime(n):
if n <= 3:
return "primo"
m = 2
while m <= (n*m):
if n % m == 0:
return "non primo"
m = m+1
return "primo"
numero = input('Inserisci il numero: ')
print prime(numero)
Questa è la traduzione in Python di quella postata precedentemente da Skydrake. -
Pippo_94.
User deleted
Se hai interesse a sviluppare ulteriormente il tuo algoritmo per trovare i numeri primi, prova a dare un'occhiata a quanto viene riportato su Wikipedia. . -
x-reynik-x.
User deleted
CITAZIONE (RootkitNeo @ 10/11/2009, 14:17)CODICEdef prime(n):
if n <= 3:
return "primo"
m = 2
while m <= (n*m):
if n % m == 0:
return "non primo"
m = m+1
return "primo"
numero = input('Inserisci il numero: ')
print prime(numero)
Questa è la traduzione in Python di quella postata precedentemente da Skydrake
Ma in questo modo dice che tutti i dispari sono primi! Provala fa così. -
.CITAZIONE (x-reynik-x @ 10/11/2009, 16:38)Ma in questo modo dice che tutti i dispari sono primi! Provala fa così
Si è vero.
C'è un errore concettuale
Trasforma quello che avevo fatto io in java in python. -
~{Skydrake™}».
User deleted
CITAZIONE (RootkitNeo @ 10/11/2009, 17:48)CITAZIONE (x-reynik-x @ 10/11/2009, 16:38)Ma in questo modo dice che tutti i dispari sono primi! Provala fa così
Si è vero.
C'è un errore concettuale
Trasforma quello che avevo fatto io in java in python
Azz, non è un errore concettuale. E' che non viene visualizzato il carattere backslash (ovvero l'operatore di divisione intera).CODICEdef prime(n):
if n <= 3:
return "primo"
m = 2
while m <= (n(backslash)m):
if n % m == 0:
return "non primo"
m = m+1
return "primo"
numero = input('Inserisci il numero: ')
print prime(numero).