Super-Poulet numbers: Difference between revisions

From Rosetta Code
Content added Content deleted
m (Thundergnat moved page Super-Poulet number to Super-Poulet numbers: Should be plural)
m (Meh, fix case errors)
Line 1: Line 1:
{{draft task}}
{{draft task}}


A [[wp:Super-Poulet_number|Super-Poulet number]] is a [[wp:Fermat_pseudoprime|Poulet number]] (or Fermat pseudoprime to base 2) whose every divisor '''''d''''' evenly divides '''''2<sup>d</sup> − 2'''''.
A [[wp:Super-Poulet_number|super-Poulet number]] is a [[wp:Fermat_pseudoprime|Poulet number]] (or Fermat pseudoprime to base 2) whose every divisor '''''d''''' evenly divides '''''2<sup>d</sup> − 2'''''.




;Task
;Task
* Find and display the first '''20''' Super-Poulet numbers.
* Find and display the first '''20''' super-Poulet numbers.




;Stretch
;Stretch
* Find and display the index and value of the first Super-Poulet number greater than one million.
* Find and display the index and value of the first super-Poulet number greater than one million.




;See also
;See also
;*[[Fermat pseudoprimes|Task: Fermat pseudoprimes]]
;*[[Fermat pseudoprimes|Task: Fermat pseudoprimes]]
;*[[wp:Super-Poulet_number|Wikipedia: Super-Poulet number]]
;*[[wp:Super-Poulet_number|Wikipedia: super-Poulet number]]
;*[[oeis:A050217|OEIS:A050217 - Super-Poulet numbers]]
;*[[oeis:A050217|OEIS:A050217 - super-Poulet numbers]]




Line 25: Line 25:
my @super-poulet = @poulet.grep: { all .&divisors.skip(1).map: { 2 == expmod 2, $_, $_ } }
my @super-poulet = @poulet.grep: { all .&divisors.skip(1).map: { 2 == expmod 2, $_, $_ } }


say "First 20 Super-Poulet numbers:\n" ~ @super-poulet[^20].gist;
say "First 20 super-Poulet numbers:\n" ~ @super-poulet[^20].gist;


for 1e6.Int, 1e7.Int -> $threshold {
for 1e6.Int, 1e7.Int -> $threshold {
say "\nIndex and value of first Super-Poulet greater than {$threshold.&cardinal}:";
say "\nIndex and value of first super-Poulet greater than {$threshold.&cardinal}:";
my $index = @super-poulet.first: * > $threshold, :k;
my $index = @super-poulet.first: * > $threshold, :k;
say "{(1+$index).&ordinal-digit} Super-Poulet number == " ~ @super-poulet[$index].&comma;
say "{(1+$index).&ordinal-digit} super-Poulet number == " ~ @super-poulet[$index].&comma;
}</lang>
}</lang>
{{out}}
{{out}}
<pre>First 20 Super-Poulet numbers:
<pre>First 20 super-Poulet numbers:
(341 1387 2047 2701 3277 4033 4369 4681 5461 7957 8321 10261 13747 14491 15709 18721 19951 23377 31417 31609)
(341 1387 2047 2701 3277 4033 4369 4681 5461 7957 8321 10261 13747 14491 15709 18721 19951 23377 31417 31609)


Index and value of first Super-Poulet greater than one million:
Index and value of first super-Poulet greater than one million:
109th Super-Poulet number == 1,016,801
109th super-Poulet number == 1,016,801


Index and value of first Super-Poulet greater than ten million:
Index and value of first super-Poulet greater than ten million:
317th Super-Poulet number == 10,031,653
317th super-Poulet number == 10,031,653
</pre>
</pre>

Revision as of 00:00, 17 August 2022

Super-Poulet numbers is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.

A super-Poulet number is a Poulet number (or Fermat pseudoprime to base 2) whose every divisor d evenly divides 2d − 2.


Task
  • Find and display the first 20 super-Poulet numbers.


Stretch
  • Find and display the index and value of the first super-Poulet number greater than one million.


See also


Raku

<lang perl6>use Prime::Factor; use Lingua::EN::Numbers;

my @poulet = lazy (2..*).hyper(:2000batch).grep: { !.is-prime && (1 == expmod 2, $_ - 1, $_) } my @super-poulet = @poulet.grep: { all .&divisors.skip(1).map: { 2 == expmod 2, $_, $_ } }

say "First 20 super-Poulet numbers:\n" ~ @super-poulet[^20].gist;

for 1e6.Int, 1e7.Int -> $threshold {

   say "\nIndex and value of first super-Poulet greater than {$threshold.&cardinal}:";
   my $index = @super-poulet.first: * > $threshold, :k;
   say "{(1+$index).&ordinal-digit} super-Poulet number == " ~ @super-poulet[$index].,

}</lang>

Output:
First 20 super-Poulet numbers:
(341 1387 2047 2701 3277 4033 4369 4681 5461 7957 8321 10261 13747 14491 15709 18721 19951 23377 31417 31609)

Index and value of first super-Poulet greater than one million:
109th super-Poulet number == 1,016,801

Index and value of first super-Poulet greater than ten million:
317th super-Poulet number == 10,031,653