예제 #1
0
파일: p133.py 프로젝트: liuliqiu/study
def is_factor_R_10_n(p):
    """测试p是否是R(10**n) {n 为自然数}的因子
    >>> is_factor_R_10_n(3)
    False
    >>> is_factor_R_10_n(11)
    True
    >>> is_factor_R_10_n(17)
    True
    >>> is_factor_R_10_n(41)
    True
    >>> is_factor_R_10_n(73)
    True
    """
    print p
    # g(k) = sum(a[k] ** i for i in range(10)) % p
    # a[0] = 10
    # a[n] = 10 ** (10 ** n)
    # a[n + 1] = 10 ** (10 ** (n + 1)) = 10 ** ((10 ** n) * 10) = a[n] ** 10
    a = 10
    is_cycle = set()
    while True:
        if sum(exp_mod(a, i, p) for i in range(10)) % p== 0:
            return True
        if a % p in is_cycle:
            return False
        is_cycle.add(a % p)
        a = exp_mod(a, 10, p)
예제 #2
0
파일: p160.py 프로젝트: liuliqiu/study
def fg(begin, end, step = 1):
    assert end > begin
    assert step in (1, 2)
    if begin > 100000:
        a = begin / 100000
        begin = begin - a * 100000
        end = end - a * 100000
    result = 1
    if end - begin > 100000:
        result *= exp_mod(h(_f(range(begin, begin + 100000, step))), (end - begin) / 100000, 100000)
    return result * h(_f(range(begin, end - (((end - begin) / 100000) * 100000), step)))
예제 #3
0
파일: prime.py 프로젝트: liuliqiu/study
def _primality_test(n):
    x = randint(2, n - 1)
    k = 0
    q = n - 1
    while q % 2 == 0:
        k += 1
        q /= 2
    j = 0
    y = exp_mod(x, q, n)
    while j < k:
        if y == n - 1 or (y == 1 and j == 0):
            return True
        if y == 1 and j > 0:
            return False
        j += 1
        y = (y * y) % n
    return y == 1
예제 #4
0
파일: p160.py 프로젝트: liuliqiu/study
def f(n):
    """
        >>> f(9)
        36288
        >>> f(10)
        36288
        >>> f(20)
        17664
        >>> f(25)
        85984
        >>> f(50)
        60512
    """
    if n <= 10 ** 5:
        return h(range(1, n + 1))
    elif n % 10 == 0:
        x,y = exp_mod(V, (n / (5 ** 5)), 100000) , f(n / 5)
        print x,y
        return g(x * y)