Dejo planteado un problema para programar. A ver si se copan con distintos lenguajes.
REALICE EL SIGUIENTE PROGRAMA:
Dos números enteros positivos y distintos m y n
se dicen amistosos si la suma de los divisores de
m (excluido m) es igual a n y a su vez la suma de
los divisores de n (excluido el n) es igual a m.
Desarrolle un programa Java que a partir de dos
números ingresados verifique si estos son
amistosos.
— Observación: El programa debe verificar que los
números sean positivos y distintos. Si no lo son,
entonces debe pedirse de nuevo el ingreso de los
números (sin terminar el programa), hasta que el
usuario ingrese los números correctos.
Dejo una posible implementación en Python:
check = 0
while check==0:
n, m = input("Ingrese el primer numero: "), input("Ingrese el segundo numero: ")
if n>0 and m>0 and n!=m:
check = 1
else:
check = 0
while check==1:
def divisores(numero):
divisores = []
for i in range(1,numero):
if numero%i==0:
divisores.append(i)
return divisores
dn, dm = divisores(n), divisores(m)
suman, sumam = 0, 0
for x in dn:
suman+=x
for y in dm:
sumam+=y
if suman==m and sumam==n:
print n , "y" , m , "son amistosos"
else:
print n , "y" , m , "no son amistosos"
check = -1
raw_input("Presione cualquier tecla para salir...")
Firma
"What we observe is not nature itself, but nature exposed to our method of questioning..."
Werner Heisenberg