Duffinian numbers: Difference between revisions
Content added Content deleted
No edit summary |
Not a robot (talk | contribs) (Add BCPL) |
||
Line 436: | Line 436: | ||
[144399 144400 144401] [144721 144722 144723] [154567 154568 154569] [158403 158404 158405] |
[144399 144400 144401] [144721 144722 144723] [154567 154568 154569] [158403 158404 158405] |
||
[166463 166464 166465] [167041 167042 167043]</pre> |
[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++}}== |
=={{header|C++}}== |