isok.pl 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. #!/usr/bin/perl
  2. use 5.014;
  3. use ntheory qw(:all);
  4. my @arr = (3, 7, 23, 71, 311, 479, 1559, 5711, 10559, 18191, 31391, 422231, 701399, 366791, 3818929, 9257329, 22000801, 36415991, 48473881, 175244281, 120293879, 427733329, 131486759, 3389934071, 2929911599, 7979490791, 36504256799, 23616331489, 89206899239, 121560956039,
  5. 395668053479,
  6. 196265095009,
  7. 513928659191,
  8. 5528920734431,
  9. 2871842842801,
  10. 4306732833311,
  11. 8402847753431,
  12. 70864718555231,
  13. );
  14. sub isok_orig {
  15. my ($n, $q) = @_;
  16. my $t = ($q-1)>>1;
  17. (powmod(nth_prime($n), $t, $q) == $q-1) || return 0;
  18. vecall { powmod($_, $t, $q) == 1 } 2..nth_prime($n)-1;
  19. }
  20. sub smallest {
  21. my($n) = @_;
  22. for(my $k = 3; ;$k = next_prime($k)) {
  23. if (isok_orig($n, $k)) {
  24. return $k;
  25. }
  26. }
  27. }
  28. foreach my $n(1..30) {
  29. my $t = smallest($n);
  30. say "a($n) = $t";
  31. if ($t != $arr[$n-1]) {
  32. say "[$n] Counter-example: $t != $arr[$n-1]";
  33. }
  34. }
  35. __END__
  36. #~ say $arr[23];
  37. #~ exit;
  38. sub isok {
  39. my ($n, $q) = @_;
  40. my $t = ($q-1)>>1;
  41. vecall { powmod($_, $t, $q) == 1 } 2..nth_prime($n)-1;
  42. }
  43. #~ foreach my $k(3..1e9) {
  44. #~ if (isok(12, $k)) {
  45. #~ die "Found: $k";
  46. #~ }
  47. #~ }
  48. #~ __END__
  49. my $n = 1;
  50. forprimes {
  51. while (isok_orig($n, $_)) {
  52. say "a($n) = $_ -- $arr[$n-1]";
  53. if ($_ != $arr[$n-1]){
  54. say "Counter-example for n = $n";
  55. }
  56. ++$n;
  57. }
  58. } 3,1e10;
  59. __END__
  60. # a(n) is the smallest odd prime q such that prime(n)^((q-1)/2) == -1 (mod q) and b^((q-1)/2) == 1 (mod q) for every natural base b < prime(n). - Thomas Ordowski, May 02 2019
  61. # a(n) is the smallest odd prime q such that b^((q-1)/2) == 1 (mod q) for every natural base b < prime(n).
  62. func isok(n,q) {
  63. (powmod(prime(n), (q-1)/2, q) == q-1) || return false
  64. var bases = (1 .. prime(n)-1)
  65. bases.all {|b|
  66. powmod(b, (q-1)/2, q) == 1
  67. }
  68. }
  69. func isok_conj(n, q) {
  70. var bases = (1 .. prime(n)-1)
  71. bases.all {|b|
  72. powmod(b, (q-1)/2, q) == 1
  73. }
  74. }
  75. for k in (1..arr.len) {
  76. say [k, isok(k, arr[k-1])]
  77. }