Diferencia entre revisiones de «Implementación de algoritmos de teoría de números/Números amigos»

Contenido eliminado Contenido añadido
Sin resumen de edición
Sin resumen de edición
Línea 200:
}
</source>
 
=== Haskell ===
<code languaje = "Haskell>
--Definición de la función "sonNumerosAmigos x y"
sonNumerosAmigos :: Int -> Int -> Bool
sonNumerosAmigos x y = if (x > 0 && y > 0) then ( sum (listaDivisores y) == x && sum
(listaDivisores x) == y ) else error("Los números deben ser enteros positivos")
where listaDivisores n = [ x | x <- [1..(n-1)], (mod n x) == 0]
 
--Otro algoritmo un poco más completo:
--Devuelve una lista con los divisores entre n y m
divisores :: Int -> Int -> [Int]
divisores n 1 = [1]
divisores n m = if mod n m == 0 then (m):divisores n (m-1) else divisores n (m-1)
 
-- Devuelve la lista de divisores de n
divisoresN :: Int -> [Int]
divisoresN n = divisores n n
 
-- Funcion que devuelve la suma de los elementos de una lista.
sumaList :: [Int] -> Int
sumaList [] =0
sumaList (x:xs) = x+sumaList(xs)
 
--Funcion que determina si dos numeros son amigos
amigos :: Int -> Int -> Bool
amigos a b = (sumaList(divisoresN a)-a)== b && (sumaList(divisoresN b)-b) == a
 
</code>
 
=== Java ===
Línea 400 ⟶ 431:
}
</script>
</source>
 
=== Scheme ===
<source lang="scheme">
;funcion principal
(define (amigos? A B)
(cond
((and (= A (sumdivisores B 1)) (= B (sumdivisores A 1)))"Amigos")
(else "No Amigos")
)
)
;funcion secundaria:suma los divisores de cada numero
(define (sumdivisores A B)
(cond
((= A B) 0)
((integer? (/ A B))(+ B (sumdivisores A (+ B 1))))
(else (sumdivisores A (+ B 1)))
)
prawn )
</source>
 
=== SLE ===
 
<source lang="python">
/*Este algoritmo calcula si dos números ingresados por el usuario son amigos. En el caso de ser iguales
y la suma de sus divisores también, advierte que son perfectos. Puede ser modificado fácilmente para que
automáticamente busque los números él mismo*/
 
var
acum : numerico
a : numerico
b : numerico
cont : numerico
div_a : numerico
div_b : numerico
 
inicio
 
imprimir ("\nDos números amigos son dos enteros positivos a y b",
"\ntales que a es la suma de los divisores propios de",
"\nb y b es la suma de los divisores propios de a.")
 
mientras (a==a){
 
imprimir ("\nIngrese un nº: ")
leer (a)
imprimir ("\ningrese otro nº: ")
leer (b)
mientras (cont <a-1){
cont=cont+1
si (a%cont==0){
acum=acum+cont
}
}
div_a=acum
cont=0
acum=0
 
mientras (cont<b-1){
cont=cont+1
si (b%cont==0){
acum=acum+cont
}
}
div_b=acum
 
si ((div_a==b and div_b==a) and (a<>b)){
imprimir ("\nlos nºs son amigos")
sino si ((div_a==b and div_b==a) and (a==b))
imprimir ("\nLos números son iguales y perfectos")
sino
imprimir ("\nlos nºs no son amigos")
}
fin
 
</source>
 
Línea 504 ⟶ 460:
else:
print ('No son amigos :(')
</source>
 
=== Scheme ===
<source lang="scheme">
;funcion principal
(define (amigos? A B)
(cond
((and (= A (sumdivisores B 1)) (= B (sumdivisores A 1)))"Amigos")
(else "No Amigos")
)
)
;funcion secundaria:suma los divisores de cada numero
(define (sumdivisores A B)
(cond
((= A B) 0)
((integer? (/ A B))(+ B (sumdivisores A (+ B 1))))
(else (sumdivisores A (+ B 1)))
)
prawn )
</source>
 
=== PSeInt (Estricto) ===
 
<source lang="python">
Proceso numeros_amigos
//Este algoritmo calcula si dos números ingresados por el usuario son amigos. En el caso de ser iguales
Línea 563 ⟶ 538:
FinMientras
FinProceso
</source>
 
=== SLE ===
 
<source>
/*Este algoritmo calcula si dos números ingresados por el usuario son amigos. En el caso de ser iguales
y la suma de sus divisores también, advierte que son perfectos. Puede ser modificado fácilmente para que
automáticamente busque los números él mismo*/
 
var
acum : numerico
a : numerico
b : numerico
cont : numerico
div_a : numerico
div_b : numerico
 
inicio
 
imprimir ("\nDos números amigos son dos enteros positivos a y b",
"\ntales que a es la suma de los divisores propios de",
"\nb y b es la suma de los divisores propios de a.")
 
mientras (a==a){
 
imprimir ("\nIngrese un nº: ")
leer (a)
imprimir ("\ningrese otro nº: ")
leer (b)
mientras (cont <a-1){
cont=cont+1
si (a%cont==0){
acum=acum+cont
}
}
div_a=acum
cont=0
acum=0
 
mientras (cont<b-1){
cont=cont+1
si (b%cont==0){
acum=acum+cont
}
}
div_b=acum
 
si ((div_a==b and div_b==a) and (a<>b)){
imprimir ("\nlos nºs son amigos")
sino si ((div_a==b and div_b==a) and (a==b))
imprimir ("\nLos números son iguales y perfectos")
sino
imprimir ("\nlos nºs no son amigos")
}
fin
 
</source>
 
Línea 646 ⟶ 677:
print ('No son amigos :(')
</source>
 
=== Haskell ===
<code languaje = "Haskell>
--Definición de la función "sonNumerosAmigos x y"
sonNumerosAmigos :: Int -> Int -> Bool
sonNumerosAmigos x y = if (x > 0 && y > 0) then ( sum (listaDivisores y) == x && sum
(listaDivisores x) == y ) else error("Los números deben ser enteros positivos")
where listaDivisores n = [ x | x <- [1..(n-1)], (mod n x) == 0]
 
--Otro algoritmo un poco más completo:
--Devuelve una lista con los divisores entre n y m
divisores :: Int -> Int -> [Int]
divisores n 1 = [1]
divisores n m = if mod n m == 0 then (m):divisores n (m-1) else divisores n (m-1)
 
-- Devuelve la lista de divisores de n
divisoresN :: Int -> [Int]
divisoresN n = divisores n n
 
-- Funcion que devuelve la suma de los elementos de una lista.
sumaList :: [Int] -> Int
sumaList [] =0
sumaList (x:xs) = x+sumaList(xs)
 
--Funcion que determina si dos numeros son amigos
amigos :: Int -> Int -> Bool
amigos a b = (sumaList(divisoresN a)-a)== b && (sumaList(divisoresN b)-b) == a
 
</code>
 
=== VB .NET ===