#!/usr/bin/python

import math
import random

def finding_prime(number):
    ''' find whether a number is prime in a simple way'''
    num = abs(number)
    if num < 4 : return True
    for x in range(2, num):
        if num % x == 0:
            return False
    return True
       

def finding_prime_sqrt(number):
    ''' find whether a number is prime as soon as it rejects all candidates up to sqrt(n) '''
    num = abs(number)
    if num < 4 : return True
    for x in range(2, int(math.sqrt(num)) + 1):
        if number % x == 0:
            return False
    return True


def finding_prime_fermat(number):
    ''' find whether a number is prime with Fermat's theorem, using probabilistic tests '''
    if number <= 102:
        for a in range(2, number):
            if pow(a, number- 1, number) != 1:
                return False
        return True
    else:
        for i in range(100):
            a = random.randint(2, number - 1)
            if pow(a, number - 1, number) != 1:
                return False
        return True



def test_finding_prime():
    number1 = 17
    number2 = 20
    assert(finding_prime(number1) == True)
    assert(finding_prime(number2) == False)
    assert(finding_prime_sqrt(number1) == True)
    assert(finding_prime_sqrt(number2) == False)
    assert(finding_prime_fermat(number1) == True)
    assert(finding_prime_fermat(number2) == False)
    print('Tests passed!')


if __name__ == '__main__':
    test_finding_prime()