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.


