sfruttando le proprietà note dei numeri perfetti è uscito questo
codice:
#include <stdio.h>
#include<math.h>
bool primo(int n) {
int b=2;
for(b = 2; b<=trunc(sqrt(n)); b++)
if(n%b == 0) {
return false;
}
return true;
}
int Pow(int x) {return (int)pow(2,(double)x);}
long Perfect(int n) {
if(primo(Pow(n+1)-1)==true) return Pow(n)*(Pow(n+1)-1);
return 0;
}
main()
{
int i=0,it=0,cont;
long num;
scanf("%d",&cont);
while(it<=cont){
i++;
if((num=Perfect(i))>0){it++;printf("%d\n",num);}
}
getchar();
getchar();
}
o la versione con la successione dell'OEIS (da wikipedia)
codice:
#include <stdio.h>
#include<math.h>
int Pow(int x) {return (int)pow(2,(double)x);}
long Perfect(int n) {
return Pow(n-1)*(Pow(n)-1);
}
int main(){
int i,n[]={2, 3, 5, 7, 13, 17, 19, 31, 61, 89};
for(i=0;i<6;i++)
printf("%d\n",Perfect(n[i]));
getchar();
}
ma ovviamente non vanno oltre il quinto numero, per come la vedo io questo è un altro esempio di esercizio dato da un prof la cui ignoranza è da denuncia