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

97 lines
1.2 KiB
Text

Load "stdlibcore.ring"
nr = 0
num = 0
sig1 = 0
cmp = 0
see "FIRST 50 DUFFINIAN NUMBERS:" + nl
while nr < 50
num = num + 1
sigma = 0
cmp = comp(num)
if cmp = 1
sgm = sigm1(num)
relat1prim()
ok
end
nr = 0
fok = 0
numc = 1
sig1 = 0
sig2 = 0
sig3 = 0
see nl + "FIRST 15 DUFFINIAN TRIPLETS:" + nl
while nr < 15
num1 = numc
num2 = num1 + 1
num3 = num2 + 1
cmp1 = comp(num1)
cmp2 = comp(num2)
cmp3 = comp(num3)
if (cmp1 = 1) and (cmp2 = 1) and (cmp3 = 1)
sigm1(num1)
sigm2(num2)
sigm3(num3)
ok
numc = numc + 1
end
func comp(nm)
fok = 0
flag = 0
for n = 1 to nm
if nm%n = 0
flag = flag + 1
ok
if flag > 2
fok = 1
exit
ok
next
return fok
func sigm1(num1)
sig1 = 0
for n = 1 to num1
if num1%n = 0
sig1 = sig1 + n
ok
next
func sigm2(num2)
sig2 = 0
for n = 1 to num2
if num2%n = 0
sig2 = sig2 + n
ok
next
func sigm3(num3)
sig3 = 0
for n = 1 to num3
if num3%n = 0
sig3 = sig3 + n
ok
next
relat2prim()
func relat1prim()
if (gcd(num,sig1) = 1)
nr = nr + 1
see "" + num + " "
ok
return nr
func relat2prim()
if ((gcd(num1,sig1) = 1) and (gcd(num2,sig2) = 1) and (gcd(num3,sig3) = 1))
nr = nr + 1
see "" + num1 + "-" + num3 + " "
ok
return nr