Python实现任意两个不等质数p,q,N=p*q,构造Zn*(小于N且与N互质,modN),是否成群

本文通过编程方式探讨了素数验证、互素列表生成、逆元存在性及封闭性的判断,并最终确定所生成列表是否构成群。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

完整代码如下:
#判断是否为素数
def isprime():
    count = 1
    while (count):
        n = int(input("输入一个质数:"))
        for i in range(2, n):
           if n % i == 0:
                print(" %d 这不是一个质数!" % n)
                break
        else:
            return n

#生成一个与N互素的列表
def CommonFactor(a,b):
    if a<b:
        t = a
        a = b
        b = t
    while(a%b):
        t = b
        b = a % b
        a = t
    return b

#判断是否存在逆元
def is_inverse(list,n):
    mark=1
    for i in range(0,len(list)):
        count=1
        for j in range(0,len(list)):
            if((list[i]*list[j])%n==1):
                count = 0
                print("%s存在逆元%s"%(list[i],list[j]),end="   ")
        if count:
            print("%s不存在逆元"%(list[i]),end="   ")
            mark=0
    print()
    if(mark):
        print("任何元素都有逆元")
    return mark

#判断运算是否封闭
def is_closed(list,n):
    mark=1
    for i in range(0, len(list)):
        for j in range(0, len(list)):
            count=0
            for k in range(0, len(list)):
                if((list[i]*list[j])%n == list[k]):
                    count=1
                    num=list[k]
            if count:
                print("%s*%s封闭值为%s"%(list[i],list[j],num))
            else:
                print("%s*%s不封闭"%(list[i],list[j]))
                mark=0
    return mark

#主函数
def main():
    p=isprime()
    count=1
    while(count):
        q=isprime()
        if not q==p:
            count=0
        else:
            print("与第一个质数相同,请重新输入")
    n=p*q
    list=[]
    for i in range(1,n):
        k=CommonFactor(i,n)
        if k==1:
            list.append(i)
    for i in range(0,len(list)):
        print(list[i],end="  ")
    print()
    a=is_inverse(list,n)
    b=is_closed(list,n)
    if a==1 and b==1:
        print("任意元素都有逆元且运算封闭,成群")
        print("群元素有%s个"%(len(list)))
    elif a==0:
        print("存在元素没有逆元,不成群")
    elif b==0:
        print("运算不封闭,不成群")

main()

实验结果:



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值