[libmath-prime-util-perl] 02/17: Add circular primes to primes.pl (OEIS 68652, also in Project Euler problem 35)
Partha P. Mukherjee
ppm-guest at moszumanska.debian.org
Thu May 21 18:47:13 UTC 2015
This is an automated email from the git hooks/post-receive script.
ppm-guest pushed a commit to annotated tag v0.21
in repository libmath-prime-util-perl.
commit 5f02d79dcfa55a6ad37132eaa2c1fc155222bbb4
Author: Dana Jacobsen <dana at acm.org>
Date: Sun Feb 10 02:34:13 2013 -0800
Add circular primes to primes.pl (OEIS 68652, also in Project Euler problem 35)
---
TODO | 2 +-
bin/primes.pl | 17 +++++++++++++++++
examples/make-script-test-data.pl | 1 +
3 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/TODO b/TODO
index 0957ee4..de31039 100644
--- a/TODO
+++ b/TODO
@@ -45,4 +45,4 @@
each), then use it to get 32-bit irands. This would only be used if they
didn't give us a RNG (so they don't care about strict crypto).
-- Add PE 35 Circular primes and PE 291 Panatoipal primes to bin/primes.pl
+- Add PE 291 Panatoipal primes to bin/primes.pl
diff --git a/bin/primes.pl b/bin/primes.pl
index 8ba5e7e..ae9e272 100755
--- a/bin/primes.pl
+++ b/bin/primes.pl
@@ -91,6 +91,7 @@ GetOptions(\%opts,
'pnp1|A005234',
'pnm1|A006794',
'euclid|A018239',
+ 'circular|A068652',
'provable',
'nompugmp', # turn off MPU::GMP for debugging
'version',
@@ -370,6 +371,18 @@ sub is_good_prime {
1;
}
+# Assumes the input is prime. Returns 1 if all digit rotations are prime.
+sub is_circular_prime {
+ my $p = shift;
+ return 1 if $p < 10;
+ return 0 if $p =~ tr/024568//;
+ # TODO: BigInts
+ foreach my $rot (1 .. length($p)-1) {
+ return 0 unless is_prime( substr($p, $rot) . substr($p, 0, $rot) );
+ }
+ 1;
+}
+
sub merge_primes {
my ($genref, $pref, $name, @primes) = @_;
if (!defined $$genref) {
@@ -485,6 +498,9 @@ sub gen_and_filter {
if (exists $opts{'pnp1'}) {
@$p = grep { is_prime( primorial(Math::BigInt->new($_))+1 ) } @$p;
}
+ if (exists $opts{'circular'}) {
+ @$p = grep { is_circular_prime($_) } @$p;
+ }
if (exists $opts{'pillai'}) {
@$p = grep { is_pillai($_); } @$p;
}
@@ -579,6 +595,7 @@ to only those primes additionally meeting these conditions:
--pnp1 Primorial+1 p#+1 is prime
--pnm1 Primorial-1 p#-1 is prime
--euclid Euclid pn#+1 is prime
+ --circular Circular all digit rotations of p are prime
--provable Ensure all primes are provably prime
Note that options can be combined, e.g. display only safe twin primes.
diff --git a/examples/make-script-test-data.pl b/examples/make-script-test-data.pl
index 760f4eb..9e60a0f 100755
--- a/examples/make-script-test-data.pl
+++ b/examples/make-script-test-data.pl
@@ -21,6 +21,7 @@ my @test_data = (
[ 1359, "Twin", "twin", 0],
[ 5385, "Safe", "safe", 0],
[ 5384, "SG", "sophie", 0],
+ [68652, "Circular", "circular", 0],
[ 2407, "Cuban y+1", "cuban1", 0],
[ 2648, "Cuban y+2", "cuban2", 0],
[ 2385, "Palindromic", "palin", 32_965_656_923],
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libmath-prime-util-perl.git
More information about the Pkg-perl-cvs-commits
mailing list