信安菜狗这学期学了离散数学,做实验的时候发现网上好像没什么python写的实验报告,正好这学期结束了翻出来写一份。
一、 实验目的和要求
目的:
编程实现整除关系这一偏序关系上所有盖住关系的求取,并判定对应偏序集是否为格。
要求:
对任意给定正整数,利用整除关系求所有由其因子构成的集合所构成的格,判断其是否为有补格。
二、实验原理及内容
基本思路延续上一个实验,还是使用字典储存序偶,由于开始时以为要做一个普适性的代码,使用采用的是序偶输入,处理过程也是序偶,后来得知要做的是关于整除的特设代码,所以对代码进行修改,但是基本框架不会有太大改变,也导致了代码看起来十分冗余。
由于整除关系对应的偏序集都是格,所以不用做任何判断,只需要判断是否为有补格。利用性质,首先,格的全上界一定是输入,的正整数,全下界一定是1,所以就根据这个来判断补元。两重循环,如果每个因子都能找到另一个因子,使它们的最小公倍数为输入的正整数,最大公约数为1,那么就是有补格。
因此定义lcm(x,y)和hcf(x,y)寻找最小公倍数和最大公因数, check_com_latice()判断是否是有补格。(本部分懒得写了直接抄的网上的代码块)
import operator
n=0
i=0
s=' '
s1={
}
variable=[]
themax=input("请输入一个整数,验证其上整除的盖住关系以及其是否为有补格:")
themax=eval(themax)
def get_element():#将输入的序偶中的元素全部不重复的提取,以便于后续性质的判定
global themax,x1,x2
for i in range(1,themax+1):
if themax % i is 0:
t=str(i)
if t not in variable:
variable.append(t)
print(variable)
def creat_ordered_pair():
global s1,variable,num
ii=0
for i in variable: