Duffinian numbers: Difference between revisions

add Draco
(Add PL/M)
(add Draco)
Line 737:
</pre>
 
 
=={{header|Draco}}==
<syntaxhighlight lang="draco">word MAXSIGMA = 10000;
[MAXSIGMA+1]word sigma;
 
proc calcsigma() void:
word i, j;
for i from 0 upto MAXSIGMA do sigma[i] := 0 od;
for i from 1 upto MAXSIGMA do
for j from i by i upto MAXSIGMA do
sigma[j] := sigma[j] + i
od
od
corp
 
proc gcd(word a, b) word:
word c;
while b > 0 do
c := a % b;
a := b;
b := c;
od;
a
corp
 
proc duff(word n) bool:
sigma[n] > n+1 and gcd(n, sigma[n]) = 1
corp
 
proc triplet(word n) bool:
duff(n) and duff(n+1) and duff(n+2)
corp
 
proc first(word n; proc(word n)bool pred; proc(word i,n)void cb) void:
word i, cur;
cur := 0;
for i from 1 upto n do
while cur := cur + 1; not pred(cur) do od;
cb(i, cur)
od
corp
 
proc tablenum(word i, n) void:
write(n:5);
if i%10 = 0 then writeln() fi
corp
 
proc tripletline(word i, n) void:
writeln(i:2, ' ', n:6, n+1:6, n+2:6)
corp
 
proc main() void:
calcsigma();
writeln("First 50 Duffinian numbers:");
first(50, duff, tablenum);
writeln();
 
writeln("First 15 Duffinian triplets:");
first(15, triplet, tripletline)
corp</syntaxhighlight>
{{out}}
<pre>First 50 Duffinian numbers:
4 8 9 16 21 25 27 32 35 36
39 49 50 55 57 63 64 65 75 77
81 85 93 98 100 111 115 119 121 125
128 129 133 143 144 155 161 169 171 175
183 185 187 189 201 203 205 209 215 217
 
First 15 Duffinian triplets:
1 63 64 65
2 323 324 325
3 511 512 513
4 721 722 723
5 899 900 901
6 1443 1444 1445
7 2303 2304 2305
8 2449 2450 2451
9 3599 3600 3601
10 3871 3872 3873
11 5183 5184 5185
12 5617 5618 5619
13 6049 6050 6051
14 6399 6400 6401
15 8449 8450 8451</pre>
 
=={{header|Factor}}==
2,114

edits