Duffinian numbers: Difference between revisions
Content added Content deleted
Not a robot (talk | contribs) (Add PL/M) |
Not a robot (talk | contribs) (add Draco) |
||
Line 737: | Line 737: | ||
</pre> |
</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}}== |
=={{header|Factor}}== |