[Purdue-pm] a Perl 6 quick example
Mark Senn
mark at ecn.purdue.edu
Wed Dec 14 12:53:47 PST 2016
Mark Ward,
1. I helped Dr. Wagstaff typeset a book having to do with factoring
large integers and haven't been sending him stuff because I think he's
already aware of anything I've ever heard of. I will bcc this to him in
case he or he would like his students to use Perl 6 (I also recommend
Mathematica) to easily experiment with ideas without having to write
much code.
2. Perl 6's is-prime sub/method uses the "Rabin-Miller" (also known as the
"Miller-Rabin") algorithm. See
http://examples.perl6.org/categories/99-problems/P36-ovid.html
for a simple example of how to factor integers using Perl 6.
Some more information about Perl 6:
Another simplification that can be done to the code below.
# "(2..*)" can be simplified to "2..*"
(grep {.is-prime}, 2..*)[^3]
(2 3 5)
Type
<<a "butterfly wings" c>>.permutations
to print all permutations of "a", "butterfly wings", and c.)
Mark Senn
Cc: purdue-pm at pm.org
X-Mailer: iPhone Mail (13G36)
From: Mark Daniel Ward <mdw at purdue.edu>
Subject: Re: [Purdue-pm] a Perl 6 quick example
Date: Wed, 14 Dec 2016 04:51:25 -0500
To: Mark Senn <mark at purdue.edu>
X-PerlMx-URL-Scanned: Yes
X-PerlMx-Virus-Scanned: Yes
X-ECN-MailServer-Origination: mailhub247.itcs.purdue.edu 128.210.5.247
X-ECN-MailServer-SpamScanAdvice: DoNotScan (-7.9/5.0)
X-ECN-MailServer-VirusScanned: by ecn-av-milter
Mark Daniel Ward <mdw at purdue.edu> wrote on 2016-12-14 at 0451:
Dear Mark,
Thank you again for your email. This email alone might have finally
convinced me to consider moving from Perl 5 to Perl 6.
I have two things for you to consider.
1. You might send your email to Sam Wagstaff, who is one of Purdue's
experts on primes and factoring.
2. I am curious what kinds of algorithms that Perl 6 is using under the
hood, for its factoring algorithms. Here is a classic kind of
challenge: if you give Perl 6 a 200 digit number that has only 2
factors, each of which are about 100 digits long, how does it know if
the 200 digit number is prime or not? What algorthm(s) is Perl 6
trying, under the hood, to perform such a calculation?
I am genuinely curious to know.
Mark
> On Dec 14, 2016, at 12:59 AM, Mark Senn <mark at purdue.edu> wrote:
>
> # The "is-prime" sub is defined in Perl 6.
> is-prime(5)
> True
>
> # The parentheses are not needed.
> is-prime 5
> True
>
> # The "is-prime" method is defined in Perl 6.
> 5.is-prime
> True
>
> # Get all primes from 2 to 10.
> grep {$_.is-prime}, (2..10)
> (2 3 5 7)
>
> # If an object is not specified, "$_" is assumed.
> grep {.is-prime}, (2..10)
> (2 3 5 7)
>
> # Get first three primes---I know the third prime comes before 10.
> (grep {.is-prime}, (2..10))[0..2]
> (2 3 5)
>
> # Using "^3" will give first three also---I think of "^3"
> # as from 0 up to but not including 3.
> (grep {.is-prime), (2..10))[^3]
> (2 3 5)
>
> # Let Perl 6 generate as many candidate integers
> # as we need (from 2 to infinity) to test for
> # primality but stop after we get 3 primes.
> (grep {.is-prime}, (2..Inf))[^3]
> (2 3 5)
>
> # Use "*" ("whatever") instead of "Inf".
> # Instead of 2 to infinity think of it
> # as 2 to whatever.
> (grep {.is-prime}, (2..*))[^3]
> (2 3 5)
>
> # Exercise for the reader, do the previous
> # computation in Perl 5 but make the code
> # at least as clear as the Perl 6 solution.
>
> # Perl 6 uses really big integers in software
> # if an integer is too big for machine computation.
> 10**1000 - 3
> 999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999!
99!
> 99999999997
>
> -mark
> _______________________________________________
> Purdue-pm mailing list
> Purdue-pm at pm.org
> http://mail.pm.org/mailman/listinfo/purdue-pm
More information about the Purdue-pm
mailing list