random_carmichael_fibonacci_pseudoprimes.pl 624 B

12345678910111213141516171819202122232425
  1. #!/usr/bin/perl
  2. # Generate random Carmichael numbers of the form:
  3. # `n = p * (2*p - 1) * (3*p - 2) * (6*p - 5)`.
  4. # About half of this numbers are also Fibonacci pseudoprimes, satisfying:
  5. # `Fibonacci(n - kronecker(n, 5)) = 0 (mod n)`.
  6. use 5.010;
  7. use strict;
  8. use warnings;
  9. use Math::GMPz;
  10. use ntheory qw(is_prob_prime random_nbit_prime);
  11. my $bits = 50; # bits of p
  12. foreach my $n (1 .. 1e6) {
  13. my $p = Math::GMPz->new(random_nbit_prime($bits));
  14. if (is_prob_prime(2 * $p - 1) && is_prob_prime(3 * $p - 2) && is_prob_prime(6 * $p - 5)) {
  15. say $p * ($p * 2 - 1) * ($p * 3 - 2) * ($p * 6 - 5);
  16. }
  17. }