Skip to content

Commit

Permalink
- Added the Number k.powerfree_part(n) method.
Browse files Browse the repository at this point in the history
Returns the k-powerfree part of `n`:

    say 30.of { 2.powerfree_part(_) }       # squarefree part (OEIS: A007913)
    say 30.of { 3.powerfree_part(_) }       # cubefree part (OEIS: A050985)
  • Loading branch information
trizen committed Aug 20, 2021
1 parent 74f03ed commit 46a3ee7
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 4 deletions.
24 changes: 20 additions & 4 deletions lib/Sidef/Types/Number/Number.pm
Original file line number Diff line number Diff line change
Expand Up @@ -14170,20 +14170,36 @@ package Sidef::Types::Number::Number {
_set_int($r);
}

sub core { # A007913
sub powerfree_part {
my ($k, $n) = @_;

# Multiplicative with:
# a(p^k) = p^(k mod 2)
# a(p^e, k) = p^(e mod k)

my $n = &_big2uistr // goto &nan;
_valid(\$n);

$k = _any2ui($$k) // goto &nan;
$n = _big2uistr($n) // goto &nan;

$k <= 0 and goto &nan;

my @factor_exp = _factor_exp($n);
@factor_exp and $factor_exp[0][0] eq '0' and return ZERO;

my $r = Math::Prime::Util::GMP::vecprod(map { $_->[0] } grep { $_->[1] % 2 } @factor_exp);
my $r = Math::Prime::Util::GMP::vecprod(
map {
($_->[1] == 1)
? $_->[0]
: Math::Prime::Util::GMP::powint($_->[0], $_->[1])
} grep { $_->[1] } map { [$_->[0], $_->[1] % $k] } @factor_exp
);
_set_int($r);
}

sub core { # A007913
(TWO)->powerfree_part($_[0]);
}

sub arithmetic_derivative {
my ($x) = @_;

Expand Down
11 changes: 11 additions & 0 deletions lib/Sidef/Types/Number/Number.pod
Original file line number Diff line number Diff line change
Expand Up @@ -5202,6 +5202,17 @@ It efficiently counts the number of k-powerfree numbers <= n, or in the range C<

=cut

=head2 powerfree_part

k.powerfree_part(n)

Returns the k-powerfree part of C<n>.

say 30.of { 2.powerfree_part(_) } # squarefree part (OEIS: A007913)
say 30.of { 3.powerfree_part(_) } # cubefree part (OEIS: A050985)

=cut

=head2 powerfree_sum

k.powerfree_sum(n)
Expand Down

0 comments on commit 46a3ee7

Please sign in to comment.