ErrorDeSintaxis

Pequeños fragmentos de código fuente en distintos lenguajes de programación, agrupados por categorías.

Puedes buscar entre los fuentes existentes, o aportar los tuyos.

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