Non so come calcolare i fattori di un numero dato (n)Un numero intero è detto perfetto quando la somma dei suoi fattori, incluso 1 (ma non se stesso), sia pari a quel numero.
Per esempio 6 è un numero perfetto perchè 6= 1+2+3.
Scrivete una funzione perfect che determini se il parametro number sia un numero perfetto. Utilizzate questa funzione in un programma che determini tutti i numeri perfetti tra 1 e 1000.
Visualizzate i fattori di ogni numero perfetto, per confermare che lo sia veramente.
Numeri perfetti in C
Moderatore: Staff
Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Numeri perfetti in C
Ragazzi vi allego la traccia del vecchio Deitel:

Ultima modifica di SIV il sab 1 ago 2009, 20:18, modificato 1 volta in totale.
Re: Numeri primi in C
Ho trovato un paper inglese dove che dato un numero mostra i fattori primi -> paper
L'ho modificato in modo da tenere traccia (counter) della somma dei fattori e confrontarlo con il numero stesso, ma non funge, nessun errore fatale, ma il programma si avvia ma non mostra nessun output, non terminando tra le altre cose:
L'ho modificato in modo da tenere traccia (counter) della somma dei fattori e confrontarlo con il numero stesso, ma non funge, nessun errore fatale, ma il programma si avvia ma non mostra nessun output, non terminando tra le altre cose:
Codice: Seleziona tutto
#include <stdio.h>
int main(void)
{
unsigned int number=0,k=0,factor,counter;
while (k<10) {
number=k;
while (number % 2 == 0) {
number=number/2;
counter+=2;
}
for (factor=2; factor*factor <= number; factor=factor+2)
if (number % factor == 0) {
number=number/factor;
counter+=factor;
}
if (counter==number){printf("%d è un numero perfetto\n\n");}
}
return 0;
}
- ccts2002
- Linux 1.x

- Messaggi: 155
- Iscritto il: gio 9 nov 2006, 23:20
- Località: milano - trieste - catania
- Contatta:
Re: Numeri primi in C
mi è sembrato di vedere almeno un errore...
nella parte:
tu entri con k=0, poni number=k, number diviso 2 ha resto uguale a 0, entri quindi nel while che pone number=number/2 (cioè number=0/2=0) e quindi il ciclo diventa infinito...e il programma non terminerà mai!
un modo per calcolare i divisori (per fare in maniera semplice e sporca) è dividere il numero per tutti i numeri minori della metà del numero e controllare il resto:
ciao
P.S.: cambia il titolo in "numeri perfetti in C"
nella parte:
Codice: Seleziona tutto
while (k<10) {
number=k;
while (number % 2 == 0) {
number=number/2;
counter+=2;
}
un modo per calcolare i divisori (per fare in maniera semplice e sporca) è dividere il numero per tutti i numeri minori della metà del numero e controllare il resto:
Codice: Seleziona tutto
#include <stdio.h>
int perfect(int a)
{
int i,tmp=1;
for ( i = 2 ; i <= a/2 ; i++){
if( a % i == 0 ) {
tmp += i;
// stampa il divisore
printf("%d ",i);
} else continue;
}
printf("\n");
// controlla se è perfetto
if (tmp == a) return 1;
else return 0;
}
int main ()
{
printf("%d\n",perfect(6));
printf("%d\n",perfect(7));
printf("%d\n",perfect(24));
printf("%d\n",perfect(28));
printf("%d\n",perfect(25));
printf("%d\n",perfect(33550336));
getchar();
}
P.S.: cambia il titolo in "numeri perfetti in C"
- albatros
- Iper Master

- Messaggi: 2098
- Iscritto il: sab 4 feb 2006, 13:59
- Kernel: 6.18.0
- Desktop: gnome and lxqt
- Distribuzione: Ubuntu 24.04 & FC 41
- Località: Darmstadt - Germania
Re: Numeri primi in C
Dovresti dire a printf quale variabile intera vuoi stampare...SIV ha scritto:if (counter==number){printf("%d è un numero perfetto\n\n");}
Re: Numeri primi in C
Vorrei spararmi per questoalbatros ha scritto:Dovresti dire a printf quale variabile intera vuoi stampare...SIV ha scritto:if (counter==number){printf("%d è un numero perfetto\n\n");}
@ccts2002
Grazie mille, tralasciando la questione matematica di dividere il numero per tutti i numeri minori della sua metà, il source funziona. Ho fatto in modo di metterlo in un ciclo for di 1000 volte, per calcolare i primi numeri perfetti fino a 1000.
Sono riuscito a fare in modo di stampare a video solo i numeri primi, però non sono riuscito a fare:
Codice: Seleziona tutto
quando è appurato che il numero è perfetto, visualizzare anche i suoi fattoriCodice: Seleziona tutto
#include <stdio.h>
int perfect(int a)
{
int i,tmp=1;
for ( i = 2 ; i <= a/2 ; i++){
if( a % i == 0 ) {
tmp += i;
//printf("%d+",i);
} else continue;
}
if (tmp == a)
return 1;
else return 0;
}
int main ()
{
int j,ris;
for ( j = 2 ; j <= 1000 ; j++){
ris = perfect(j);
if (ris==1){printf("Il numero %d è perfetto!\n",j);}
}
return 0;
}Codice: Seleziona tutto
muller@sab-muller ~/Test C $ ./a.out
Il numero 6 è perfetto!
Il numero 28 è perfetto!
Il numero 496 è perfetto!