- or download this
srand(1); # So everything is using the same numbers
my $s = 0;
for (1..1000000) {
$s += nearest_sqrt(int(rand(2**47)));
}
print "$s\n";
- or download this
use ntheory qw/divisors/;
sub closest {
my @d = divisors(shift);
$d[ $#d >> 1 ];
}
- or download this
use ntheory qw/fordivisors/;
sub closest {
my($n,$sqrtn,$min) = ($_[0], int(sqrt($_[0])));
fordivisors { $min = $_ if $_ <= $sqrtn; } $n;
$min;
}
- or download this
use ntheory qw/factor/;
sub closest {
my($n) = @_;
...
# 4. Return the largest divisor <= sqrt n.
$d[ $#d >> 1 ];
}
- or download this
use Math::Pari qw/divisors/;
sub closest {
my $d = divisors(shift);
$d->[ $#$d >> 1 ];
}
- or download this
use Math::Factor::XS qw/factors/;
sub closest {
my @d = (1, factors($_[0]), $_[0]);
$d[ $#d >> 1 ];
}