Duffinian numbers: Difference between revisions

Add BCPL
No edit summary
(Add BCPL)
Line 436:
[144399 144400 144401] [144721 144722 144723] [154567 154568 154569] [158403 158404 158405]
[166463 166464 166465] [167041 167042 167043]</pre>
 
=={{header|BCPL}}==
<syntaxhighlight lang="bcpl">get "libhdr"
 
let calcsigmas(sig, n) be
$( sig!0 := 0
for i = 0 to n do sig!i := 0
for i = 1 to n/2 do
$( let j = i
while 0 < j <= n do
$( sig!j := sig!j + i
j := j + i
$)
$)
$)
 
let gcd(m, n) = n=0 -> m, gcd(n, m rem n)
 
let duff(sig, n) = sig!n > n+1 & gcd(n, sig!n) = 1
let triple(sig, n) = duff(sig, n) & duff(sig, n+1) & duff(sig, n+2)
 
let first(sig, f, max, cb) be
$( let n = 0
for i = 1 to max
$( n := n+1 repeatuntil f(sig, n)
cb(i, n)
$)
$)
 
let start() be
$( let showsingle(i, n) be
$( writef("%I4", n)
if i rem 10=0 then wrch('*N')
$)
 
let showtriple(i, n) be writef("%I2: %I6 %I6 %I6*N", i, n, n+1, n+2)
 
let sig = getvec(20000)
calcsigmas(sig, 20000)
 
writes("First 50 Duffinian numbers:*N")
first(sig, duff, 50, showsingle)
 
writes("*NFirst 15 Duffinian triples:*N")
first(sig, triple, 15, showtriple)
freevec(sig)
$)</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 triples:
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|C++}}==
2,114

edits