eff.pl 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #!/usr/bin/perl
  2. # Compute the decimal expansion of the sum of reciprocals of Brazilian primes, also called the Brazilian primes constant.
  3. # Decimal expansion of the sum of reciprocals of Brazilian primes, also called the Brazilian primes constant.
  4. # https://oeis.org/A306759
  5. use 5.020;
  6. use warnings;
  7. use experimental qw(signatures);
  8. use ntheory qw(:all);
  9. use Math::AnyNum;
  10. sub brazillian_constant ($lim) {
  11. my $N = Math::GMPz->new("$lim");
  12. my $q = Math::GMPq->new(0);
  13. my $z = Math::GMPz->new(0);
  14. my $sum = Math::MPFR::Rmpfr_init2(192);
  15. Math::MPFR::Rmpfr_set_ui($sum, 0, 0);
  16. my %seen;
  17. forprimes {
  18. my $K = $_;
  19. for my $n (2 .. rootint($N - 1, $K - 1)) {
  20. Math::GMPz::Rmpz_ui_pow_ui($z, $n, $K);
  21. Math::GMPz::Rmpz_sub_ui($z, $z, 1);
  22. Math::GMPz::Rmpz_divexact_ui($z, $z, $n - 1);
  23. if (is_prob_prime(Math::GMPz::Rmpz_get_str($z, 10))) {
  24. if ((($z+1)&$z)==0) {
  25. if ($seen{$z}++) {
  26. say "Duplicate: $z";
  27. next;
  28. }
  29. else {
  30. say "First seen: $z";
  31. }
  32. }
  33. if ($z < $N) {
  34. Math::GMPq::Rmpq_set_ui($q, 1, 1);
  35. Math::GMPq::Rmpq_set_den($q, $z);
  36. Math::MPFR::Rmpfr_add_q($sum, $sum, $q, 0);
  37. }
  38. else {
  39. say "Exceeds: $z";
  40. }
  41. }
  42. }
  43. } 3, logint($N + 1, 2);
  44. return Math::AnyNum->new($sum);
  45. }
  46. # S(10^17) = 0.331754466507345195169606384653791389785035241967
  47. # S(10^18) = 0.33175446662828756863723305575693
  48. foreach my $n (17) {
  49. say "B(10^$n) ~ ", brazillian_constant(Math::GMPz->new(10)**$n);
  50. }
  51. __END__
  52. B(10^1) ~ 0.14285714285714285714285714285714
  53. B(10^2) ~ 0.28899272838682348594073100542184
  54. B(10^3) ~ 0.32290223556269144810843769843366
  55. B(10^4) ~ 0.32952368063536693571523726793301
  56. B(10^5) ~ 0.33121713119461798438057432911381
  57. B(10^6) ~ 0.33160386963492172892306297309503
  58. B(10^7) ~ 0.33171391586547473334091623260371
  59. B(10^8) ~ 0.33174341910781704122196304798802
  60. B(10^9) ~ 0.33175132673949885380067237840723
  61. B(10^10) ~ 0.33175356516689372562521462231951
  62. B(10^11) ~ 0.33175420579318423292974799113059
  63. B(10^12) ~ 0.33175439067722742680152185017303
  64. B(10^13) ~ 0.33175444440331880514669754839817
  65. B(10^14) ~ 0.33175446011369675270545267094599
  66. B(10^15) ~ 0.33175446473544852087966767749508
  67. B(10^16) ~ 0.33175446610148680800864203095541
  68. B(10^17) ~ 0.33175446650734519516960638465379
  69. B(10^18) ~ 0.33175446662828756863723305575693
  70. B(10^19) ~ 0.33175446666446018177571079766533
  71. B(10^20) ~ 0.33175446667530957668020208565143
  72. First seen: 7
  73. First seen: 31
  74. First seen: 8191
  75. Duplicate: 31
  76. First seen: 127
  77. Duplicate: 8191
  78. First seen: 131071
  79. First seen: 524287
  80. First seen: 2147483647
  81. First seen: 2305843009213693951
  82. B(10^20) ~ 0.33175446667530957668020208565143
  83. perl eff.pl 19027.02s user 56.10s system 98% cpu 5:23:25.45 total