RosettaCodeData/Task/Duffinian-numbers/Icon/duffinian-numbers.icon
2026-04-30 12:34:36 -04:00

28 lines
718 B
Text

procedure main(A)
write("The first 50 Duffian numbers:")
every writes(" ",isduffinian(seq())\50)
write("\n")
limit := 15
write("The first ",limit," Duffian triples:")
every (isduffinian(n := seq()),isduffinian(n+1),isduffinian(n+2))\limit do
write("\t(",n,",",n+1,",",n+2,")")
end
procedure isduffinian(n)
x := \cfact(n)**\afact(sumfactors(n))
return (*\x = 1, !x = 1, n)
end
procedure cfact(n) # all factors of n if n is a composite number
return (*(f := afact(n)) > 2, f)
end
procedure afact(n) # all factors of n
every (f := set(), i := 1 to n, n%i = 0,insert(f,i))
return f
end
procedure sumfactors(n)
every (s := 0, i := 1 to n, n%i = 0) do s +:= i
return s
end