Zumkeller numbers: Difference between revisions
lang->syntaxhighlight test.
Tag: Rollback |
(lang->syntaxhighlight test.) |
||
Line 37:
{{trans|D}}
<
V divs = [1, n]
V i = 2
Line 112:
I count % 8 == 0
print()
i += 2</
{{out}}
Line 145:
=={{header|AArch64 Assembly}}==
{{works with|as|Raspberry Pi 3B version Buster 64 bits}}
<
/* ARM assembly AARCH64 Raspberry PI 3B */
/* program zumkellex641.s */
Line 633:
/* for this file see task include a file in language AArch64 assembly */
.include "../includeARM64.inc"
</syntaxhighlight>
{{Output:}}
<pre>
Line 661:
On my machine, this takes about 0.28 seconds to perform the two main searches and a further 107 to do the stretch task. However, the latter time can be dramatically reduced to 1.7 seconds with the cheat of knowing beforehand that the first 200 or so odd Zumkellers not ending with 5 are divisible by 63. The "abundant number" optimisation's now used with odd numbers, but the cheat-free running time was only two to three seconds longer without it.
<
on aliquotSum(n)
if (n < 2) then return 0
Line 819:
local cheating
set cheating to false
doTask(cheating)</
{{output}}
<
6 12 20 24 28 30 40 42 48 54 56 60 66 70 78 80 84 88 90 96
102 104 108 112 114 120 126 132 138 140 150 156 160 168 174 176 180 186 192 198
Line 845:
351351 459459 513513 567567 621621 671517 729729 742203 783783 793611
812889 837837 891891 908523 960687 999999 1024947 1054053 1072071 1073709
1095633 1108107 1145529 1162161 1198197 1224531 1270269 1307691 1324323 1378377"</
=={{header|ARM Assembly}}==
{{works with|as|Raspberry Pi}}
<
/* ARM assembly Raspberry PI */
/* program zumkeller4.s */
Line 1,527:
/***************************************************/
.include "../affichage.inc"
</syntaxhighlight>
<pre>
Program start
Line 1,560:
=={{header|C sharp|C#}}==
{{trans|Go}}
<
using System.Collections.Generic;
using System.Linq;
Line 1,655:
}
}
}</
{{out}}
<pre>The first 220 Zumkeller numbers are:
Line 1,684:
=={{header|C++}}==
<
#include <cmath>
#include <vector>
Line 1,826:
// if we get here it ain't no zum
return false;
}</
{{out}}
<pre>
Line 1,871:
=={{header|D}}==
{{trans|C#}}
<
import std.stdio;
Line 1,961:
}
}
}</
{{out}}
<pre>The first 220 Zumkeller numbers are:
Line 1,991:
=={{header|F_Sharp|F#}}==
This task uses [https://rosettacode.org/wiki/Sum_of_divisors#F.23]
<
// Zumkeller numbers: Nigel Galloway. May 16th., 2021
let rec fG n g=match g with h::_ when h>=n->h=n |h::t->fG n t || fG(n-h) t |_->false
Line 2,002:
Seq.initInfinite((*)2>>(+)1)|>Seq.map(fun n->(n,sod n))|>Seq.filter(fun(n,g)->fN n g)|>Seq.take 40|>Seq.iter(fun(n,_)->printf "%d " n); printfn "\n"
Seq.initInfinite((*)2>>(+)1)|>Seq.filter(fun n->n%10<>5)|>Seq.map(fun n->(n,sod n))|>Seq.filter(fun(n,g)->fN n g)|>Seq.take 40|>Seq.iter(fun(n,_)->printf "%d " n); printfn "\n"
</syntaxhighlight>
{{out}}
<pre>
Line 2,013:
=={{header|Factor}}==
{{works with|Factor|0.99 2019-10-06}}
<
math.primes.factors memoize prettyprint sequences ;
Line 2,054:
"First 40 odd Zumkeller numbers not ending with 5:" print
40 odd-zumkellers-no-5 8 show</
{{out}}
<pre>
Line 2,085:
=={{header|Go}}==
<
import "fmt"
Line 2,175:
}
fmt.Println()
}</
{{out}}
Line 2,208:
=={{header|Haskell}}==
{{Trans|Python}}
<
import Data.List.Split (chunksOf)
import Data.Numbers.Primes (primeFactors)
Line 2,280:
justifyRight :: Int -> Char -> String -> String
justifyRight n c = (drop . length) <*> (replicate n c <>)</
{{Out}}
<pre>First 220 Zumkeller numbers:
Line 2,313:
=={{header|J}}==
Implementation:<
zum=: {{
if. 2|s=. +/divs=. divisors y do. 0
Line 2,319:
else. s=. -:s for_d. divs do. if. d<:s do. s=. s-d end. end. s=0
end.
}}@></
Task examples:<
6 12 20 24 28 30 40 42 48 54 56 60 66 70 78 80 84 88 90 96 102 104
108 112 114 120 126 132 138 140 150 156 160 168 174 176 180 186 192 198 204 208 210 216
Line 2,341:
351351 459459 513513 567567 621621 671517 729729 742203 783783 793611
812889 837837 891891 908523 960687 999999 1024947 1054053 1072071 1073709
1095633 1108107 1145529 1162161 1198197 1224531 1270269 1307691 1324323 1378377</
=={{header|Java}}==
<
import java.util.ArrayList;
import java.util.Collections;
Line 2,456:
}
</syntaxhighlight>
{{out}}
Line 2,497:
generates a stream of partitions is easily transformed into a
specialized function that prunes irrelevant partitions efficiently.
<
def factors:
. as $num
Line 2,563:
end
| true)
// false;</
"First 220:", limit(220; range(2; infinite) | select(is_zumkeller)),
""
"First 40 odd:", limit(40; range(3; infinite; 2) | select(is_zumkeller))</
{{out}}
<pre>
Line 2,589:
=={{header|Julia}}==
<
function factorize(n)
Line 2,637:
println("\n\nFirst 40 odd Zumkeller numbers not ending with 5:")
printconditionalnum((n) -> isodd(n) && (string(n)[end] != '5') && iszumkeller(n), 40, 8)
</
<pre>
First 220 Zumkeller numbers:
Line 2,671:
=={{header|Kotlin}}==
{{trans|Java}}
<
import kotlin.math.sqrt
Line 2,779:
return divisors
}
}</
{{out}}
<pre>First 220 Zumkeller numbers:
Line 2,807:
=={{header|Lobster}}==
<
// Derived from Julia and Python versions
Line 2,867:
print "\n\n40 odd Zumkeller numbers:"
printZumkellers(40, true)
</syntaxhighlight>
{{out}}
<pre>
Line 2,903:
=={{header|Mathematica}} / {{header|Wolfram Language}}==
<
ZumkellerQ[n_] := Module[{d = Divisors[n], t, ds, x},
ds = Total[d];
Line 2,929:
i += 2;
];
res</
{{out}}
<pre>{6,12,20,24,28,30,40,42,48,54,56,60,66,70,78,80,84,88,90,96,102,104,108,112,114,120,126,132,138,140,150,156,160,168,174,176,180,186,192,198,204,208,210,216,220,222,224,228,234,240,246,252,258,260,264,270,272,276,280,282,294,300,304,306,308,312,318,320,330,336,340,342,348,350,352,354,360,364,366,368,372,378,380,384,390,396,402,408,414,416,420,426,432,438,440,444,448,456,460,462,464,468,474,476,480,486,490,492,496,498,500,504,510,516,520,522,528,532,534,540,544,546,550,552,558,560,564,570,572,580,582,588,594,600,606,608,612,616,618,620,624,630,636,640,642,644,650,654,660,666,672,678,680,684,690,696,700,702,704,708,714,720,726,728,732,736,740,744,750,756,760,762,768,770,780,786,792,798,804,810,812,816,820,822,828,832,834,836,840,852,858,860,864,868,870,876,880,888,894,896,906,910,912,918,920,924,928,930,936,940,942,945,948,952,960,966,972,978,980,984}
Line 2,936:
=={{header|Nim}}==
{{trans|Go}}
<
template isEven(n: int): bool = (n and 1) == 0
Line 3,006:
inc count
stdout.write if count mod 8 == 0: '\n' else: ' '
inc n, 2</
{{out}}
Line 3,038:
Now using the trick, that one partition sum must include n and improved recursive search.<BR>
Limit is ~1.2e11
<
//https://oeis.org/A083206/a083206.txt
{$IFDEF FPC}
Line 3,728:
writeln('runtime ',(GetTickCount64-T0)/1000:8:3,' s');
END.
</syntaxhighlight>
{{out}}
<pre>
Line 3,809:
=={{header|Perl}}==
{{libheader|ntheory}}
<
use warnings;
use feature 'say';
Line 3,853:
$n = 0; $z = '';
$z .= do { $n < 40 ? (!!($_%2 and $_%5) and is_Zumkeller($_) and ++$n and "$_ ") : last } for 1 .. Inf;
in_columns(10, $z);</
{{out}}
Line 3,883:
=={{header|Phix}}==
{{trans|Go}}
<!--<
<span style="color: #008080;">function</span> <span style="color: #000000;">isPartSum</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">f</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">l</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">t</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">t</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span> <span style="color: #008080;">return</span> <span style="color: #004600;">true</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
Line 3,927:
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
<!--</
{{out}}
<pre>
Line 3,964:
=={{header|PicoLisp}}==
<
(make
(for I N
Line 4,015:
(and
(=0 (% C 8))
(prinl) ) ) )</
{{out}}
<pre>
Line 4,046:
===Procedural===
Modified from a footnote at OEIS A083207 (see reference in problem text) by Charles R Greathouse IV.
<
from sympy.combinatorics.subsets import Subset
Line 4,078:
print("\n\n40 odd Zumkeller numbers:")
printZumkellers(40, True)
</
<pre>
220 Zumkeller numbers:
Line 4,116:
Relying on the standard Python libraries, as an alternative to importing SymPy:
<
from itertools import (
Line 4,318:
# MAIN ---
if __name__ == '__main__':
main()</
{{Out}}
<pre>First 220 Zumkeller numbers:
Line 4,355:
{{trans|Zkl}}
<
(require math/number-theory)
Line 4,395:
(newline)
(tabulate "First 40 odd Zumkeller numbers not ending in 5:"
(first-n-matching-naturals 40 (λ (n) (and (odd? n) (not (= 5 (modulo n 10))) (zum? n)))))</
{{out}}
Line 4,419:
(formerly Perl 6)
{{libheader|ntheory}}
<
sub zumkeller ($range) {
Line 4,449:
# Stretch. Slow to calculate. (minutes)
put "\nFirst 40 odd Zumkeller numbers not divisible by 5:\n" ~
zumkeller(flat (^Inf).map: {my \p = 10 * $_; p+1, p+3, p+7, p+9} )[^40].rotor(10)».fmt('%7d').join: "\n";</
{{out}}
<pre>First 220 Zumkeller numbers:
Line 4,478:
=={{header|REXX}}==
The construction of the partitions were created in the order in which the most likely partitions would match.
<
parse arg n m v . /*obtain optional arguments from the CL*/
if n=='' | n=="," then n= 220 /*Not specified? Then use the default.*/
Line 4,568:
if p1==p2 then return 1 /*Partition sums equal? Then X is Zum.*/
end /*part*/
return 0 /*no partition sum passed. X isn't Zum*/</
{{out|output|text= when using the default inputs:}}
<pre>
Line 4,591:
=={{header|Ring}}==
<
load "stdlib.ring"
Line 4,756:
last -= 1
end
</syntaxhighlight>
Output:
<pre>
Line 4,782:
=={{header|Ruby}}==
<
def divisors
Line 4,818:
puts "\n#{n=40} odd Zumkeller numbers not ending with 5:"
p_enum 1.step(by: 2).lazy.select{|x| x % 5 > 0 && x.zumkeller?}.take(n)
</syntaxhighlight>
{{out}}
<pre>220 Zumkeller numbers:
Line 4,852:
=={{header|Rust}}==
<
use std::convert::TryInto;
Line 4,937:
}
}
</syntaxhighlight>
{{out}}
<pre>
Line 4,955:
=={{header|Sidef}}==
<
return false if n.is_prime
Line 4,988:
say "\nFirst 40 odd Zumkeller numbers not divisible by 5: "
say (1..Inf `by` 2 -> lazy.grep { _ % 5 != 0 }.grep(is_Zumkeller).first(40).join(' '))</
{{out}}
<pre>
Line 5,002:
=={{header|Standard ML}}==
<
exception Found of string ;
Line 5,055:
end;
</syntaxhighlight>
call loop and output - interpreter
<
- val Zumkellerlist = fn step => fn no5 =>
let
Line 5,090:
742203, 783783, 793611, 812889, 837837, 891891, 908523, 960687, 999999, 1024947, 1054053, 1072071, 1073709, 1095633, 1108107, 1145529,
1162161, 1198197, 1224531, 1270269, 1307691, 1324323, 1378377
</syntaxhighlight>
=={{header|Swift}}==
Line 5,096:
{{trans|Go}}
<
extension BinaryInteger {
Line 5,156:
print("First 220 zumkeller numbers are \(Array(zums.prefix(220)))")
print("First 40 odd zumkeller numbers are \(Array(oddZums.prefix(40)))")
print("First 40 odd zumkeller numbers that don't end in a 5 are: \(Array(oddZumsWithout5.prefix(40)))")</
{{out}}
Line 5,166:
=={{header|Visual Basic .NET}}==
{{trans|C#}}
<
Function GetDivisors(n As Integer) As List(Of Integer)
Dim divs As New List(Of Integer) From {
Line 5,265:
End While
End Sub
End Module</
{{out}}
<pre>The first 220 Zumkeller numbers are:
Line 5,295:
=={{header|Vlang}}==
{{trans|Go}}
<
mut divs := [1, n]
for i := 2; i*i <= n; i++ {
Line 5,382:
}
println('')
}</
{{out}}
Line 5,418:
{{libheader|Wren-fmt}}
I've reversed the order of the recursive calls in the last line of the ''isPartSum'' function which, as noted in the Phix entry, seems to make little difference to Go but (as one might have expected) speeds up this Wren script enormously. The first part is now near instant but was taking several minutes previously. Overall it's now only about 5.5 times slower than Go itself which is a good result for the Wren interpreter.
<
import "/fmt" for Fmt
import "io" for Stdout
Line 5,484:
i = i + 2
}
System.print()</
{{out}}
Line 5,517:
=={{header|zkl}}==
{{trans|Julia}} {{trans|Go}}
<
// if(n==1) return(T); // we con't care about this case
( pd:=[1..(n).toFloat().sqrt()].filter('wrap(x){ n%x==0 }) )
Line 5,540:
}
canSum(sum/2,ds) and n or Void.Skip // sum is even
}</
<
zw:=[2..].tweak(isZumkellerW);
do(11){ zw.walk(20).pump(String,"%4d ".fmt).println() }
Line 5,551:
println("\nThe first 40 odd Zumkeller numbers which don't end in 5 are:");
zw:=[3..*, 2].tweak(fcn(n){ if(n%5) isZumkellerW(n) else Void.Skip });
do(5){ zw.walk(8).pump(String,"%7d ".fmt).println() }</
{{out}}
<pre style="font-size:83%">
|