高幂模求解 / High Power Modular Exponentiation Solution

4月 30, 2024·
Junhong Liu
Junhong Liu
· 1 分钟阅读时长

程序说明 Reference books: https://www.cnblogs.com/linyujun/p/5194170.html Reference books: https://baike.baidu.com/item/%E6%AC%A7%E6%8B%89%E5%87%BD%E6%95%B0/1944850?fr=aladdin#3_6 Completion time:2021-5-25 Last modification time :2021-5-25

import sys
import math

#参考文献:https://www.cnblogs.com/linyujun/p/5194170.html

print("************程序功能************")
print("求 【X^Y mod Z】 的值")
print("********************************")

print("Reference books: https://www.cnblogs.com/linyujun/p/5194170.html")
print("Reference books: https://baike.baidu.com/item/%E6%AC%A7%E6%8B%89%E5%87%BD%E6%95%B0/1944850?fr=aladdin#3_6")
print("Completion time:2021-5-25")
print("Last modification time :2021-5-25",'\n')
print("--------------------------------------------------------")

print("请输入X:")
X = input()
X = int(X)

print("请输入Y:")
Y = input()
Y = int(Y)

print("请输入Z:")
Z = input()
Z = int(Z)

judge = 0 #接受Z是否为素数指令,0表示Z为素数,1表示Z不为素数

#判断Z是否为素数,并求出素数个数
def judge_sushu(P):
    if (P==2 or P==3):
        return (0)
    dim = int(P**0.5)+1 #必须使用+1,不能使用ceil,否则4时出错
    for i in range(2,dim):
        if (P%i != 0 and i<(dim-1)):
            continue
        elif(P%i!=0 and i==(dim-1)):
            return (0)    #返回1说明P为素数
        else:
            return (i)

Prime_matrix = []

P = Z
Factor = judge_sushu(P)
if (Factor != 0):
    judge = 1
    while(1):
        Prime_matrix.append(int(Factor))
        P = P/Factor
        if (judge_sushu(P) == 0):
            Prime_matrix.append(int(P))
            break
        else: 
            Factor = judge_sushu(P)
else:
    Prime_matrix.append(int(Z))

#求结果
Prime_set = list(set(Prime_matrix))
phi = Z
for i in range(len(Prime_set)):
    phi = phi-phi/Prime_set[i] #欧拉函数值

ans = (int(X%Z)**int(phi+(Y%phi)))%Z #必须加上int,否则会转换成float类型,超出限制
print("结果为:")
print(ans)