psp_from_smooth_primes_extra.pl 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #!/usr/bin/perl
  2. # Generate pseudoprimes that are product of primes p such that p-1 and p+1 are both B-smooth, for some small bound B.
  3. use 5.020;
  4. use warnings;
  5. use ntheory qw(:all);
  6. use Math::Prime::Util::GMP;
  7. use List::Util qw(shuffle uniq);
  8. use experimental qw(signatures);
  9. use Math::GMPz;
  10. use ntheory qw(:all);
  11. use Math::AnyNum qw(is_smooth);
  12. sub is_lucas_carmichael ($n) {
  13. if ($n > ~0) {
  14. $n = Math::GMPz::Rmpz_init_set_str($n, 10);
  15. }
  16. my $t = $n + 1;
  17. vecall { $t % ($_ + 1) == 0 } Math::Prime::Util::GMP::factor($n);
  18. }
  19. #~ my @a = (13, 31, 37, 61, 97, 181, 271, 331, 433, 577, 601, 661, 4801);
  20. #~ my @b = (11, 13, 17, 19, 23, 31, 37, 41, 59, 61, 67, 73, 97, 101, 103, 109, 137, 151, 163, 181, 241, 251, 271, 277, 331, 359, 401, 433, 463, 487, 523, 541, 577, 601, 661, 751, 829, 929, 1151, 1153, 1181, 1201, 1297, 1621, 1657, 1783, 1801, 2377, 2593, 3169, 3271, 4049, 4721, 4801, 5779, 6277, 6353, 6661, 6961, 14401, 14779, 16421, 19141, 25057, 25411);
  21. #~ push @a, grep { $_ <= 200 } @b;
  22. my @a = (5, 11, 17, 23, 29, 47, 59, 71, 83, 107, 167, 179, 359, 419, 431, 599);
  23. my @b = (
  24. 5, 7, 11, 13, 17, 19, 23, 29, 37, 47, 53, 59, 71, 79, 83, 89, 107, 113,
  25. 127, 149, 167, 179, 191, 223, 239, 251, 257, 269, 317, 359, 383, 419, 431, 439, 479, 491,
  26. 499, 503, 557, 593, 599, 601, 647, 811, 881, 971, 977, 1217, 6359, 8179, 9857, 16253
  27. );
  28. #push @a, grep { $_ <= 200} @b;
  29. #push @a, shuffle(@b);
  30. push @a, grep { $_ % 2 == 1 } grep { is_smooth($_ + 1, 7) and is_smooth($_ - 1, 43) } @{primes(1e6)};
  31. $#a = 30;
  32. @a = shuffle(@a);
  33. @a = uniq(@a);
  34. foreach my $k (7 .. 10) {
  35. forcomb {
  36. my $c = Math::Prime::Util::GMP::vecprod(@a[@_]);
  37. #if (Math::Prime::Util::GMP::is_pseudoprime($c,2)) {
  38. #if (Math::Prime::Util::GMP::is_carmichael($c)) {
  39. if (is_lucas_carmichael($c)) {
  40. say $c;
  41. }
  42. } scalar(@a), $k;
  43. }