The following code is untested, but should do what you wanted. Use is with
large numbers at your own risk- the code was not written to be fast.

#! /usr/bin/env python

import random

def miller_rabin(n, confidence=20):
    """Tests whether n is prime with confidence at least
1­(4**­confidence)."""
        # find t, s, and d such that t = n­1 = d*(2**s), d an odd integer
    t, s, d = n, 0, 0
    while not t % 2:
        t = t >> 1
        s += 1
    t, d = n, t

    # check a number of witnesses equal to your confidence
    for i in range(confidence):
        # select a random witness
        a = random.randrange(2, n)
        x = pow(a, d, n)
        if x == 1: continue
        if x == t: continue
        # iterate over powers of x mod n
        for r in range(1, s):
            x = pow(x, 2, n)
            if x == t: break
            if x == 1: return False
        else: return False
    return True

def is_probable_fermat_prime(n):
    if n & 1 != 1:
        return False
    if ((1 << n.bit_length() - 1) + 1) != n:
        return False
    return miller_rabin(n)

def parse_number(s):
    n = int(s)
    if is_probable_fermat_prime(n):
        return ~n
    return n

def get_line():
    line = input("> ")
    num1, op, num2 = line.split()
    num1 = parse_number(num1)
    num2 = parse_number(num2)
    op = op.strip()
    if op == "+":
        print(num1 + num2)
    if op == "-":
        print(num1 - num2)
    if op == "/":
        print(num1 / num2)
    if op == "*":
        print(num1 * num2)

if __name__ == "__main__":
    while True:
        get_line()


On Sat, Dec 7, 2013 at 6:51 PM, David Goldsmith <d.l.goldsm...@gmail.com>wrote:

> Date: Sat, 7 Dec 2013 11:33:13 -0800
>> From: geremy condra <debat...@gmail.com>
>> To: Seattle Python Interest Group <seattle-python@lists.seapig.org>
>> Subject: Re: [SEAPY] Running Python on ARM processors
>>
>
>
>> Imagine taking mathematical notation
>> and making all the symbols mean something different for fermat primes, or
>> on every second Tuesday.
>>
>
> Sounds like fun! Can I play? ;-)
>
> DG
>
>

Reply via email to