generate.pl 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #!/usr/bin/perl
  2. # Lexicographically earliest sequence of numbers whose partial products are all Fermat pseudoprimes to base 2 (A001567).
  3. # https://oeis.org/A374027
  4. # Previously known terms:
  5. # 341, 41, 61, 181, 721, 3061, 6121, 9181, 27541, 36721, 91801, 100981, 238681, 21242521, 67665781, 477361, 48690721, 7160401, 76377601, 35802001
  6. use 5.036;
  7. use ntheory qw(:all);
  8. use Math::Prime::Util::GMP;
  9. use Math::GMPz;
  10. # PARI/GP program (faster):
  11. # my(S=List(341), base=2); my(m = vecprod(Vec(S))); my(L = znorder(Mod(base, m))); print1(S[1], ", "); while(1, forstep(k=lift(1/Mod(m, L)), oo, L, if(gcd(m,k) == 1 && k > 1 && base % k != 0, if((m*k-1) % znorder(Mod(base, k)) == 0, print1(k, ", "); listput(S, k); L = lcm(L, znorder(Mod(base, k))); m *= k; break)))); \\ ~~~~
  12. my @primes = (341);
  13. my $base = 2;
  14. my $m = Math::GMPz->new(vecprod(@primes));
  15. my $L = Math::GMPz->new(znorder($base, $m));
  16. say $primes[0];
  17. while (1) {
  18. my $u = Math::GMPz::Rmpz_init();
  19. my $v = Math::GMPz::Rmpz_init();
  20. my $t = Math::GMPz::Rmpz_init();
  21. Math::GMPz::Rmpz_invert($v, $m, $L);
  22. for (my $p = $v ; ; Math::GMPz::Rmpz_add($p, $p, $L)) {
  23. if (gcd($m, $p) == 1 and $p > 1) {
  24. Math::GMPz::Rmpz_mul($u, $m, $p);
  25. Math::GMPz::Rmpz_sub_ui($u, $u, 1);
  26. Math::GMPz::Rmpz_set_str($t, Math::Prime::Util::GMP::znorder($base, $p), 10);
  27. if (Math::GMPz::Rmpz_divisible_p($u, $t)) {
  28. say $p;
  29. push @primes, Math::GMPz::Rmpz_init_set($p);
  30. $L = Math::GMPz->new(lcm($L, $t));
  31. $m *= $p;
  32. last;
  33. }
  34. }
  35. }
  36. }
  37. __END__
  38. 341
  39. 41
  40. 61
  41. 181
  42. 721
  43. 3061
  44. 6121
  45. 9181
  46. 27541
  47. 36721
  48. 91801
  49. 100981
  50. 238681
  51. 21242521
  52. 67665781
  53. 477361
  54. 48690721
  55. 7160401
  56. 76377601
  57. 35802001
  58. 83394792001
  59. 7500519001
  60. 60004152001
  61. 3420236664001
  62. 1380095496001
  63. 13110907212001
  64. 56583915336001
  65. 128003857254001
  66. 2760190992001
  67. 2969965507392001
  68. 71764965792001
  69. 1150535931577344001
  70. 713092582592208001
  71. 13650629438193696001
  72. 2037407378834880001
  73. 4074814757669760001
  74. 12224444273009280001
  75. 8544886546833486720001
  76. 1586975318114685894720001
  77. 86398297306871921280001
  78. 863982973068719212800001
  79. 474875898533320533612480001
  80. 10435680053280029920320001
  81. 8787941097498972564480001
  82. 101061322621238184491520001
  83. 606367935727429106949120001
  84. 331076892907176292394219520001