一道我搞不懂的数论题

def phi(n):
    if n <= 1:
        return n
    for i in range(2, n + 1):
        if n % i == 0:
            ans = 1
            while n % i == 0:
                n //= i
                ans *= i
            ans //= i
            ans *= i - 1
            return ans * phi(n)


def common(x, y):
    if x > y:
        x, y = y, x
    i = 2
    ans = 1
    while i <= x:
        while x % i == 0 and y % i == 0:
            x //= i
            y //= i
            ans *= i
        i += 1
    return ans


def check(i, n):
    for j in range(1, phi(n)):
        if pow(i, j, n) == 1:
            return False
    return True


n = 67108934
total = 0
for i in range(n):
    if pow(i, phi(n), n) == 1 and common(i, n) == 1 and check(i, n):
        print(i)
        total += i

print ("Flag is cnss{%d}" % (total))

能输出flag就好 本来就是一道翻译题
目前是用原根乱搞搞出来了答案 但是搞不懂原理 先开坑在此

发布了11 篇原创文章 · 获赞 5 · 访问量 3372

猜你喜欢

转载自blog.csdn.net/qq_24855707/article/details/101991013