Largest proper divisor of n: Difference between revisions

Content added Content deleted
(Added X86 Assembly example.)
(→‎{{header|Raku}}: demonstrate for some larger numbers too)
Line 485: Line 485:
=={{header|Raku}}==
=={{header|Raku}}==
A little odd to special case a(1) == 1 as technically, 1 doesn't have any proper divisors... but it matches '''[[oeis:A032742|OEIS A032742]]''' so whatever.
A little odd to special case a(1) == 1 as technically, 1 doesn't have any proper divisors... but it matches '''[[oeis:A032742|OEIS A032742]]''' so whatever.

Note: this example is ridiculously overpowered (and so, somewhat inefficient) for a range of 1 to 100, but will easily handle large numbers without modification.
<lang perl6>use Prime::Factor;
<lang perl6>use Prime::Factor;


for 0, 2**67 - 1 -> $add {
say (flat 1, (2..100).map: *.&proper-divisors.sort.tail ).batch(10)».fmt("%2d").join: "\n";</lang>
my $start = now;

my $range = $add + 1 .. $add + 100;

say "GPD for {$range.min} through {$range.max}:";

say ( $range.hyper(:18batch).map: {$_ == 1 ?? 1 !! $_ %% 2 ?? $_ / 2 !! .&proper-divisors.sort.tail} )\
.batch(10)».fmt("%{$add.chars + 1}d").join: "\n";

say (now - $start).fmt("%0.3f seconds\n");
}</lang>
{{out}}
{{out}}
<pre> 1 1 1 2 1 3 1 4 3 5
<pre>GPD for 1 through 100:
1 1 1 2 1 3 1 4 3 5
1 6 1 7 5 8 1 9 1 10
1 6 1 7 5 8 1 9 1 10
7 11 1 12 5 13 9 14 1 15
7 11 1 12 5 13 9 14 1 15
Line 498: Line 512:
1 36 1 37 25 38 11 39 1 40
1 36 1 37 25 38 11 39 1 40
27 41 1 42 17 43 29 44 1 45
27 41 1 42 17 43 29 44 1 45
13 46 31 47 19 48 1 49 33 50</pre>
13 46 31 47 19 48 1 49 33 50
0.071 seconds

GPD for 147573952589676412928 through 147573952589676413027:
73786976294838206464 49191317529892137643 73786976294838206465 1 73786976294838206466 21081993227096630419 73786976294838206467 49191317529892137645 73786976294838206468 8680820740569200761
73786976294838206469 5088756985850910791 73786976294838206470 49191317529892137647 73786976294838206471 13415813871788764813 73786976294838206472 29514790517935282589 73786976294838206473 49191317529892137649
73786976294838206474 6416258808246800563 73786976294838206475 977310944302492801 73786976294838206476 49191317529892137651 73786976294838206477 29514790517935282591 73786976294838206478 87167130885810049
73786976294838206479 49191317529892137653 73786976294838206480 21081993227096630423 73786976294838206481 7767050136298758577 73786976294838206482 49191317529892137655 73786976294838206483 2784414199805215339
73786976294838206484 11351842506898185613 73786976294838206485 49191317529892137657 73786976294838206486 939961481462907089 73786976294838206487 29514790517935282595 73786976294838206488 49191317529892137659
73786976294838206489 82581954443019817 73786976294838206490 147258377885867 73786976294838206491 49191317529892137661 73786976294838206492 29514790517935282597 73786976294838206493 13415813871788764817
73786976294838206494 49191317529892137663 73786976294838206495 1 73786976294838206496 2202596307308603179 73786976294838206497 49191317529892137665 73786976294838206498 5088756985850910793
73786976294838206499 1 73786976294838206500 49191317529892137667 73786976294838206501 21081993227096630429 73786976294838206502 29514790517935282601 73786976294838206503 49191317529892137669
73786976294838206504 13415813871788764819 73786976294838206505 103270785577100359 73786976294838206506 49191317529892137671 73786976294838206507 29514790517935282603 73786976294838206508 21081993227096630431
73786976294838206509 49191317529892137673 73786976294838206510 11351842506898185617 73786976294838206511 1 73786976294838206512 49191317529892137675 73786976294838206513 1305964182209525779
0.440 seconds</pre>


=={{header|REXX}}==
=={{header|REXX}}==