Math-NumSeq
view release on metacpan or search on metacpan
lib/Math/NumSeq/PrimeIndexOrder.pm view on Meta::CPAN
}
sub next {
my ($self) = @_;
### PrimeIndexOrder next(): $self->{'i'}
my $i = $self->{'i'}++;
my $targets = $self->{'targets'};
my $level = 0;
my $k;
if ($self->{'on_values'} ne 'primes') {
if ($i < $targets->[0]) {
return ($i, 0);
}
}
for (;;) {
($k, $targets->[$level]) = $self->{'seqs'}->[$level]->next;
$k--;
if ($level >= $#$targets) {
my $seq = Math::NumSeq::Primes->new;
push @{$self->{'seqs'}}, $seq;
(undef, $targets->[$level+1]) = $seq->next;
}
$level++;
### $k
### $level
if ($k < $targets->[$level]) {
return ($i, $level);
}
}
}
sub pred {
my ($self, $value) = @_;
return ($value == int($value)
&& $value >= 0);
}
1;
__END__
=for stopwords Ryde Math-NumSeq primeness
=head1 NAME
Math::NumSeq::PrimeIndexOrder -- order of primeness by primes at prime indexes
=head1 SYNOPSIS
use Math::NumSeq::PrimeIndexOrder;
my $seq = Math::NumSeq::PrimeIndexOrder->new;
my ($i, $value) = $seq->next;
=head1 DESCRIPTION
This is the order of primeness by Neil Fernandez, counting levels of prime
at prime index iterations,
=over
L<http://www.borve.org/primeness/FOP.html>
=back
i = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
value = 0, 1, 2, 0, 3, 0, 1, 0, 0, 0, 4, 0, 1, 0, 0, 0, 2, ...
Any composite has order 0. The order for a prime is based on whether its
index in the list of all primes 2,3,5,7,11,etc is a prime and how many times
that prime index descent can be repeated.
For example i=17 is a prime and is at index 7 in the list of all primes.
That index 7 is a prime too and is at index 4. Then stop there since 4 is
not a prime. Two iterations to reach a non-prime means i=17 has value 2 as
its order of primeness.
=head2 Primes Only
Option C<on_values =E<gt> 'primes'> selects the orders of just the primes
2,3,5,7,etc. The effect is to eliminate the 0s from the sequence.
1, 2, 3, 1, 4, 1, 2, 1, 1, 1, 5, 1, 2, 1, 1, 1, ...
=head1 FUNCTIONS
See L<Math::NumSeq/FUNCTIONS> for behaviour common to all sequence classes.
=over 4
=item C<$seq = Math::NumSeq::PrimeIndexOrder-E<gt>new (level =E<gt> $n)>
Create and return a new sequence object.
=back
=head1 SEE ALSO
L<Math::NumSeq>,
L<Math::NumSeq::Primes>,
L<Math::NumSeq::PrimeIndexPrimes>,
L<Math::NumSeq::ErdosSelfridgeClass>
=head1 HOME PAGE
L<http://user42.tuxfamily.org/math-numseq/index.html>
=head1 LICENSE
Copyright 2011, 2012, 2013, 2014, 2016, 2019, 2020 Kevin Ryde
Math-NumSeq is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.
Math-NumSeq is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details.
You should have received a copy of the GNU General Public License along with
Math-NumSeq. If not, see <http://www.gnu.org/licenses/>.
=cut
( run in 0.619 second using v1.01-cache-2.11-cpan-71847e10f99 )