prog.pl 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #!/usr/bin/perl
  2. # Primes p such that if k is the sum of the first p primes then the sum of the first k primes is prime.
  3. # https://oeis.org/A321343
  4. use 5.014;
  5. use ntheory qw(:all);
  6. use Math::AnyNum qw(:overload);
  7. {
  8. my $prev_p;
  9. my $prev_sum;
  10. sub sum_primes_1 {
  11. my ($n) = @_;
  12. if (not defined($prev_p)) {
  13. $prev_p = $n;
  14. $prev_sum = 0 + sum_primes($n);
  15. return $prev_sum;
  16. }
  17. $prev_sum += sum_primes($prev_p + 1, $n);
  18. $prev_p = $n;
  19. return $prev_sum;
  20. }
  21. }
  22. {
  23. my $prev_p;
  24. my $prev_sum;
  25. sub sum_primes_2 {
  26. my ($n) = @_;
  27. if (not defined($prev_p)) {
  28. $prev_p = $n;
  29. $prev_sum = 0 + sum_primes($n);
  30. return $prev_sum;
  31. }
  32. $prev_sum += sum_primes($prev_p + 1, $n);
  33. $prev_p = $n;
  34. return $prev_sum;
  35. }
  36. }
  37. {
  38. my $prev_i;
  39. my $prev_p;
  40. sub after_prime1 {
  41. my ($n) = @_;
  42. if (not(defined($prev_i))) {
  43. $prev_i = $n;
  44. $prev_p = nth_prime($n);
  45. return $prev_p;
  46. }
  47. for (1 .. $n - $prev_i) {
  48. $prev_p = next_prime($prev_p);
  49. }
  50. $prev_i = $n;
  51. return $prev_p;
  52. }
  53. }
  54. {
  55. my $prev_i;
  56. my $prev_p;
  57. sub after_prime2 {
  58. my ($n) = @_;
  59. if (not(defined($prev_i))) {
  60. $prev_i = $n;
  61. $prev_p = nth_prime($n);
  62. return $prev_p;
  63. }
  64. for (1 .. $n - $prev_i) {
  65. $prev_p = next_prime($prev_p);
  66. }
  67. $prev_i = $n;
  68. return $prev_p;
  69. }
  70. }
  71. my $i = 1;
  72. forprimes {
  73. my $k = $_;
  74. my $p = nth_prime(sum_primes_2(nth_prime($k)));
  75. my $sum = sum_primes_1($p);
  76. if (is_prime($sum)) {
  77. print "a($i) = $k\n";
  78. ++$i;
  79. }
  80. } 1e7;