harmonic_prime_powers.pl 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #!/usr/bin/perl
  2. # Daniel "Trizen" Șuteu
  3. # Date: 29 July 2017
  4. # https://github.com/trizen
  5. # Harmonic sum of prime powers <= n, defined as:
  6. #
  7. # Sum_{p <= n} (Sum_{1 <= k <= floor(log(n)/log(p))} 1/p^k)
  8. #
  9. # where p runs over the prime number <= n.
  10. # This is equivalent with:
  11. # Sum_{p <= n} (p^(floor(log(n)/log(p))) - 1) / (p^(floor(log(n)/log(p))) * (p-1))
  12. use 5.010;
  13. use strict;
  14. use warnings;
  15. use ntheory qw(forprimes);
  16. use Math::AnyNum qw(:overload ilog);
  17. sub harmonic_prime_powers {
  18. my ($n) = @_;
  19. my $sum = 0;
  20. forprimes {
  21. my $p = $_;
  22. my $k = $p**ilog($n, $p);
  23. $sum += ($k - 1) / ($k * ($p - 1));
  24. } $n;
  25. return $sum;
  26. }
  27. foreach my $n (1 .. 30) {
  28. say harmonic_prime_powers($n);
  29. }
  30. __END__
  31. 0
  32. 1/2
  33. 5/6
  34. 13/12
  35. 77/60
  36. 77/60
  37. 599/420
  38. 1303/840
  39. 4189/2520
  40. 4189/2520
  41. 48599/27720
  42. 48599/27720
  43. 659507/360360
  44. 659507/360360
  45. 659507/360360
  46. 1364059/720720
  47. 23909723/12252240
  48. 23909723/12252240
  49. 466536977/232792560
  50. 466536977/232792560
  51. 466536977/232792560
  52. 466536977/232792560
  53. 10963143031/5354228880
  54. 10963143031/5354228880
  55. 55886560931/26771144400
  56. 55886560931/26771144400
  57. 170634254393/80313433200
  58. 170634254393/80313433200
  59. 5028706810597/2329089562800
  60. 5028706810597/2329089562800