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:
{{draft task}}
 
A [[wp:Super-Poulet_number|Supersuper-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
* Find and display the first '''20''' Supersuper-Poulet numbers.
 
 
;Stretch
* Find and display the index and value of the first Supersuper-Poulet number greater than one million.
 
 
;See also
;*[[Fermat pseudoprimes|Task: Fermat pseudoprimes]]
;*[[wp:Super-Poulet_number|Wikipedia: Supersuper-Poulet number]]
;*[[oeis:A050217|OEIS:A050217 - Supersuper-Poulet numbers]]
 
 
Line 25:
my @super-poulet = @poulet.grep: { all .&divisors.skip(1).map: { 2 == expmod 2, $_, $_ } }
 
say "First 20 Supersuper-Poulet numbers:\n" ~ @super-poulet[^20].gist;
 
for 1e6.Int, 1e7.Int -> $threshold {
say "\nIndex and value of first Supersuper-Poulet greater than {$threshold.&cardinal}:";
my $index = @super-poulet.first: * > $threshold, :k;
say "{(1+$index).&ordinal-digit} Supersuper-Poulet number == " ~ @super-poulet[$index].&comma;
}</lang>
{{out}}
<pre>First 20 Supersuper-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 Supersuper-Poulet greater than one million:
109th Supersuper-Poulet number == 1,016,801
 
Index and value of first Supersuper-Poulet greater than ten million:
317th Supersuper-Poulet number == 10,031,653
</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