#!/usr/bin/perl -w
#
# Caluclate Buenos Aires constant - https://youtu.be/_gCKX6VMvmU
# Sum of infinite series method
# (C)Nov 26 2020 Pegasus Epsilon - Educational Purposes Only
use strict;
use bignum ( p => -4000 );
use v5.10;
@_ = map { chomp; $_ } <DATA>; # read saved data
close DATA;
my ($n,$v,$b) = ($_[$#_] =~ /(.*),(.*),(.*)/); # split the last entry
@_ = map { s/,(.*)//; $_ } @_; # discard the constant convergence log
open my $data, '>>', $0;
say "Resuming from $n (Buenos Aires constant = $b)...";
$v *= $n;
for (;;) {
$n += 2;
my $sqrt = sqrt($n);
unless ($sqrt == int($sqrt)) {
foreach my $d (@_) {
last if 0 == $n % $d;
next if $d < $sqrt;
$b += ($n - 1) / $v;
say "$n is prime, Buenos Aires constant = $b...";
say $data "$n,$v,$b";
push @_, $n;
$v *= $n;
last;
}
}
}
__DATA__
2,1,1
3,2,2