Un número n es perfecto cuando es igual a la suma de sus divisores propios. Por ejemplo, el número 6 es perfecto porque 6=1+2+3.
Un número a cualquiera siempre es divisible por 1 y tamibién por a (si mismo) como mínimo. El 1 se considera divisor propio, mientras que a no. Así los divisores de 8 son: 1, 2, 4 y 8 mientras que los divisores propios de 8 son: 1,2 y 4.
El siguiente código busca los números perfectos menores a un número n ingresado desde el teclado.
//numerosPerfectos.cpp
/* *****************************
Armando B. VERA
Prof. de Mateática e Informática
****************************** */
#include <iostream>
using namespace std;
bool nP(int n);
int main() {
int n;
cout << "\n\t ***********************************" << endl;
cout << "\t ***** Busca números perfectos ***** " << endl;
cout << "\n\t ***********************************" << endl;
cout << "\n\t\tIngrese un entero: ";
cin >> n;
if(n>10000){
cout << "¡Por favor! Aguarde ..." << endl;
}
for(int i=n; i>1 ;i--){
if(nP(i)==true){
cout << "\t" << i << " Es perfecto" << endl;
}
}
return 0;
}
bool nP(int n){
bool vr=false;
int sd=0;
for(int i=(n/2)+1;i>0;i--){
if(n%i==0){
sd+=i;
}
}
if(sd==n){
return true;
}
return vr;
}
Sería algo muy interesante modificar el código de modo tal que se puedan buscar números perfectos realmente grande. El tipo de datos, por lo menos debería ser long long int.
Dos números a y b son amigos si la suma de los divisores propios de a es igual a b y la suma de los divisores propios de b es igual a a.
Escriba un programa que busque números amigos menores a un número n ingresado desde el teclado.