Llevo todo el día tratando de realizar un ejercicio que se compone de una función, que recibe un número como parámetro y muestra la suma de los divisores de dicho número:
Código:
Sé de antemano que los números 220 y 284 son número amigos y la funciona correctamente, si introduzco 220 me dice que la suma de sus divisores es 284. Hasta aquí todo correcto.GO IF EXISTS (select name from sysobjects where name ='SumaDivisores' and type='FN') DROP FUNCTION SumaDivisores GO GO IF EXISTS (select name from sysobjects where name ='SumaDivisores' and type='FN') DROP FUNCTION SumaDivisores GO CREATE FUNCTION SumaDivisores(@num bigint) returns bigint as begin declare @contador bigint; declare @numero bigint; declare @numero2 bigint; declare @i bigint; set @contador = 0 set @i = @num set @numero = @num while @i>=2 begin set @i = @i - 1 set @numero2=@numero%@i if @numero2 = 0 begin set @contador= @contador + @i end end return @contador; end
Ahora creo un procedimiento que, en teoría, debe mostrar los número amigos en una tabla:
Código:
Pero falla, me devuelve los números perfectos, pero no los número amigos. Si le paso como parámetro el número 1000 sólo debe mostrar los números 220 y 284. Si alguien pudiera ayudarme lo agradecería muchísimo.GO IF EXISTS(select name from sysobjects where name='numerosAmigos' and type='P') DROP PROCEDURE numerosAmigos GO CREATE procedure numerosAmigos @maximo bigint as BEGIN drop table numamigos; CREATE TABLE numamigos ( [numOrden] [bigint] IDENTITY (1, 1) NOT NULL , [numero] [bigint] NULL , [amigo] [bigint] NULL , CONSTRAINT [PK_numamigos] PRIMARY KEY CLUSTERED ( [numOrden] ) ON [PRIMARY]) declare @i bigint declare @amigo bigint set @i=1; while @i < @maximo BEGIN set @amigo=dbo.SumaDivisores(@i); if @amigo=@i BEGIN INSERT INTO dbo.numamigos(numero,amigo) VALUES (@i,@amigo); end set @i=@i + 1; end SELECT numero,amigo FROM dbo.numamigos; end
Un saludo.