C++: Numeros Amigos
muestra el numero amigo de
Lenguaje: C++
Categoría: Consola
// Fuente procedente de ErrorDeSintaxis.es
// muestra el numero amigo de
// Nivel: Intermedio
// Disponible desde 17/10/2011
// Aportado por dennisbot
// Autor original: Dennis Huillca Portilla
// Web original: http://facebook.com/dennis.huillca
/* Dos números amigos son dos enteros positivos a y b tales que a es la suma de los divisores propios de b, y b es la suma de los divisores propios de a. Un ejemplo es el par (220, 284) */ #include<iostream> #include<cstdio> #include<vector> #include<cstring> #include<cmath> #define db(a) cout << #a << " = " << a << endl; using namespace std; int amigo(int n) { int m = 0; for (int i = 1; i * i <= n; i++) { if(n % i == 0) m += i + n / i; if(i * i == n) m -= i; } m -= n; int t = 0; for (int i = 1; i * i <= m; i++) { if(m % i == 0) t += i + m / i; if(i * i == m) t -= i; } t -= m; if(t == n) return m; return -1; } int main() { int n; while(cin >> n && n != 0) { cout << amigo(n) << endl; } return 0; }
Resultado:
123 -1 220 284