Factorial primes: Difference between revisions
Content added Content deleted
(→{{header|Ruby}}: Add Ruby) |
m (→{{header|Python}}: Tidy) |
||
Line 728: | Line 728: | ||
{{libheader|gmpy2}} |
{{libheader|gmpy2}} |
||
This takes about 32 seconds to find the first 33 factorial primes on my machine (Ryzen 5 1500X). |
|||
<syntaxhighlight lang="python"> |
<syntaxhighlight lang="python"> |
||
from itertools import count |
|||
from itertools import islice |
from itertools import islice |
||
from typing import Iterable |
from typing import Iterable |
||
Line 739: | Line 740: | ||
def factorials() -> Iterable[int]: |
def factorials() -> Iterable[int]: |
||
fact = 1 |
|||
for i in count(1): |
|||
yield fact |
|||
fact *= i |
|||
n *= i |
|||
i += 1 |
|||
def factorial_primes() -> Iterable[Tuple[int, int, str]]: |
def factorial_primes() -> Iterable[Tuple[int, int, str]]: |
||
for |
for n, fact in enumerate(factorials()): |
||
if gmpy2.is_prime( |
if gmpy2.is_prime(fact - 1): |
||
yield ( |
yield (n, fact - 1, "-") |
||
if gmpy2.is_prime( |
if gmpy2.is_prime(fact + 1): |
||
yield ( |
yield (n, fact + 1, "+") |
||
def |
def print_factorial_primes(limit=10) -> None: |
||
print(f"First { |
print(f"First {limit} factorial primes.") |
||
for |
for n, fact_prime, op in islice(factorial_primes(), 1, limit + 1): |
||
s = str( |
s = str(fact_prime) |
||
if len(s) > 40: |
if len(s) > 40: |
||
s = f"{s[:20]}...{s[-20:]} ({len(s)} digits)" |
s = f"{s[:20]}...{s[-20:]} ({len(s)} digits)" |
||
print(f"{ |
print(f"{n}! {op} 1 = {s}") |
||
if __name__ == "__main__": |
if __name__ == "__main__": |
||
import sys |
import sys |
||
print_factorial_primes(int(sys.argv[1]) if len(sys.argv) > 1 else 10) |
|||
</syntaxhighlight> |
</syntaxhighlight> |
||