krzysztof_reformulated_zeta_function.pl 775 B

123456789101112131415161718192021222324252627282930313233
  1. #!/usr/bin/perl
  2. # Formula due to Krzysztof Maslanka
  3. use 5.018;
  4. use strict;
  5. use warnings;
  6. use experimental qw(signatures);
  7. use lib qw(../lib);
  8. use Math::AnyNum qw(:overload); # can be commented out
  9. use Math::AnyNum qw(gamma binomial zeta factorial);
  10. sub Ak($k) {
  11. my $sum = 0;
  12. foreach my $j (0 .. $k) {
  13. $sum += (-1)**$j * binomial($k, $j) * (2 * $j + 1) * zeta(2 * $j + 2);
  14. }
  15. $sum;
  16. }
  17. sub krzysztof_zeta ($s, $r = 100) {
  18. my $sum = 0;
  19. foreach my $k (0 .. $r) {
  20. $sum += (gamma($k + 1 - $s / 2) / gamma(1 - $s / 2)) * (Ak($k) / factorial($k));
  21. }
  22. $sum / ($s - 1);
  23. }
  24. say krzysztof_zeta(3); #=> 1.2020569022705898699637409727804911671219286162
  25. say krzysztof_zeta(5); #=> 1.0369277551507417486201175962997774385468699839