コード例 #1
0
ファイル: dirichlet.py プロジェクト: fermulerpy/fermulerpy
def prime_count_AP(n, a, d):
    """
    Returns the count of prime numbers less than or equal to n in AP defined by first term as 'a' and common difference 'd'

    Parameters
    ----------
    n : int
        upper bound for prime numbers
    a : int
        first term of AP
    d : int
        common difference of AP
    return : int
        returns the count of prime numbers

    """
    if (n != int(n) or a != int(a) or d != int(d)):
        raise ValueError("n , a and d are integers")
    if (if_infinite_prime_AP(a, d) == False):
        raise ValueError("a and d must be coprime")
    x = a
    count = 0
    while (x <= n):
        if (isPrime(x) == True):
            count = count + 1
        x = x + d
    return count
コード例 #2
0
def generate_euclid_perfect(k):
    """
    Return the perfect number generated from euclid's theorm
    If 2^k - 1 is prime, then (2^k)((2^k)-1) is perfect

    Parameters
    ----------
    k : int
        denotes power of 2 in 2^k -1
    return : int
        returns perfect number

    """
    if (k != int(k) or k < 1):
        raise ValueError("k must be positive integer")
    n = int(math.pow(2, k) - 1)
    if (isPrime(n) == False):
        raise ValueError("invalid k")
    return int((math.pow(2, k - 1)) * (math.pow(2, k) - 1))
コード例 #3
0
def quadratic_residues(p):
    """
    Returns an array of quadratic residues mod p for a given prime p

    Parameters
    ----------
    p : int
        denotes a prime number
    return : array
        returns an array of quadratic residues

    """
    if (p != int(p) or p < 1):
        raise ValueError("p must be positive integer")
    if (isPrime(p) == False):
        raise ValueError("p must be prime number")
    quadratic_residues_array = []
    for i in range(1, int(p / 2) + 1):
        quadratic_residues_array.append((i * i) % p)
    quadratic_residues_array = sorted(quadratic_residues_array)
    return quadratic_residues_array
コード例 #4
0
def jacobi_symbol(n, p):
    """
    Returns jacobi symbol (1 or -1) for given integer n and given prime p

    Parameters
    ----------
    n : int
        denotes positive integer
    p : int
        denotes a prime number
    return : int
        returns 1 or -1

    """
    if (n != int(n) or n < 1 or p != int(p) or p < 1):
        raise ValueError("n and p must be positive integers")
    if (isPrime(p) == False):
        raise ValueError("p must be prime number")

    symbol = 1
    for i in prime_factorization(p):
        symbol = symbol * (math.pow(legendre_euler_symbol(n, i),
                                    prime_factorization(p)[i]))
    return int(symbol)
コード例 #5
0
def legendre_euler_symbol(n, p):
    """
    Returns 1 if n is quadratic residue mod p else return -1

    Parameters
    ----------
    n : int
        denotes positive integer
    p : int
        denotes prime number
    return : int
        returns 1 if n is quadratic residue mod p else return -1

    """
    if (n != int(n) or n < 1 or p != int(p) or p < 1):
        raise ValueError("n and p must be positive integers")
    if (isPrime(p) == False):
        raise ValueError("p must be prime")
    r = (math.pow(n, (p - 1) // 2)) % p
    r = int(r)
    if (r == 1):
        return r
    else:
        return -1
コード例 #6
0
def test_isPrime2():
    assert isPrime(727) == True
コード例 #7
0
def test_isPrime1():
    assert isPrime(20) == False