non-residue_fermat_records.pl 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #!/usr/bin/perl
  2. # a(n) is the least Fermat pseudoprime k to base 2, such that the smallest quadratic non-residue of k is prime(n).
  3. # a(n) is the least composite number k such that 2^(k-1) == 1 (mod k) and A020649(k) = prime(n).
  4. # See also:
  5. # https://oeis.org/A020649
  6. # https://oeis.org/A307809
  7. use 5.020;
  8. use ntheory qw(:all);
  9. use experimental qw(signatures);
  10. use Math::GMPz;
  11. my @primes = @{primes(100)};
  12. sub least_nonresidue_odd ($n) { # for odd n
  13. my @factors = map { $_->[0] } factor_exp($n);
  14. foreach my $p (@primes) {
  15. (vecall { kronecker($p, $_) == 1 } @factors) || return $p;
  16. }
  17. return 101;
  18. }
  19. sub least_nonresidue_sqrtmod ($n) { # for any n
  20. foreach my $p (@primes) {
  21. sqrtmod($p, $n) // return $p;
  22. }
  23. return 101;
  24. }
  25. my %table;
  26. while (<>) {
  27. next if /^\h*#/;
  28. /\S/ or next;
  29. my $n = (split(' ', $_))[-1];
  30. $n || next;
  31. next if length($n) > 25;
  32. is_pseudoprime($n, 2) || next;
  33. my $q = qnr($n);
  34. #next if ($q <= 43); # 43 = prime(14)
  35. if (exists $table{$q}) {
  36. next if ($table{$q} <= $n);
  37. }
  38. $table{$q} = $n;
  39. printf("a(%2d) <= %s\n", prime_count($q), $n);
  40. }
  41. say "\nFinal results:";
  42. foreach my $k (sort { $a <=> $b } keys %table) {
  43. my $n = prime_count($k);
  44. printf("a(%2d) <= %s\n", $n, $table{$k});
  45. }
  46. __END__
  47. a( 1) = 341
  48. a( 2) = 2047
  49. a( 3) = 18721
  50. a( 4) = 318361
  51. a( 5) = 2163001
  52. a( 6) = 17208601
  53. a( 7) = 6147353521
  54. a( 8) = 18441949681
  55. a( 9) = 24155301361
  56. a(10) = 2945030568769
  57. a(11) = 22415236323481
  58. a(12) = 6328140564467401
  59. a(13) = 45669044917576081
  60. a(14) = 111893049583818721
  61. # Upper-bounds:
  62. a(15) <= 3164607919507114081
  63. a(16) <= 716074318521330199201
  64. a(17) <= 129717501475261645009
  65. # Upper-bounds with large Carmichael numbers:
  66. a( 1) <= 19564907650561
  67. a( 2) <= 264439982526721
  68. a( 3) <= 275551466561281
  69. a( 4) <= 2735858897856001
  70. a( 5) <= 13281228027748801
  71. a( 6) <= 47627546342246641
  72. a( 7) <= 204205882154994721
  73. a( 8) <= 683326283718141423361
  74. a( 9) <= 112246826696602419341521