南京邮电大学离散数学实验三:编程实现整除关系这一偏序关系上所有盖住关系的求取,并判定对应偏序集是否为格

article/2025/8/27 16:38:45

实验原理及内容

说明:这部分内容主要包括:

1、形式化描述实验中所使用的数据结构和存储结构,给出函数之间的调用关系和数据传递方式;

2、给出核心算法的C++或Java等语言的源代码,并加上详细注释,分析算法的时间复杂度;

3、给出测试数据及运行结果、实验相关结论等。

这次题目要求是根据整除关系建立偏序关系,集合由一个正整数的因子所构成,所以该偏序集中的最大下界为1,最小上界为该正整数,所以该偏序集是一个格。又因为是整除关系,则“交”即为求两者的最大公约数,“并”即为求两者的最小公倍数,故而满足分配律,因此这个偏序集是个分配格。

判断这个集合是否为有补格,根据定理可以先判断元素数是否为2的倍数,不过编程起来更加复杂,于是我就采用逐个求补元的方法。如果对于某个元素找完了所有的元素也没找到补元,则不满足有补性,否则就为有补格,又因为是分配格,所以也是布尔格。 

对于所有可能的偏序集,有一个特例即{1},这个偏序集最小上界等于最大下界等于1,1的补元是他本身。他也是个有补格,要特殊考虑。

 

#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
//辗转相除法求最大公约数 
int GYS(int a ,int b)
{int temp;if(a<b){temp=a;a=b;b=temp;
}
while(temp=a%b)
{a=b;b=temp;
};
return b;
};
//根据最大公约数求最小公倍数 
int GBS(int a,int b)
{return a*b/GYS(a,b);
};
int main()
{int n,m,i,j,k;int a[20];a[0]=1;//第一个元素肯定是1 j = n = 1;//j代表数组a[]的下标,n标记元素个数 //do{cout<<"请输入一个正整数:";cin>>m;for(i=2;i<=m/2;i++)//求给定正整数的因子:{if(m%i==0){//若是能被给定正整数整除,即加入数组a[]   a[j++]=i;n++;}}if(m!=1){//最后把该正整数加入数组a[],1不重复加入  a[j]=m;n++;}cout<<"因子有:";for(i=0;i<n;i++){cout<<a[i]<<" ";}cout<<endl;int flag=0;for(i=0;i<n;i++){for(j=n-1;j>=0;j--){if(GBS(a[i],a[j])==m && GYS(a[i],a[j])==1){cout<<a[i]<<"有补元素"<<a[j]<<"。\n";break;}if(j==0){flag=1;}}}if(!flag){cout<<"因为所有成员都有补元素,所以这是一个有补格。"<<endl;}else{cout<<"因为不是所有成员都有补元素,所以不是一个有补格。"<<endl;}flag=0;//已知肯定是分配格, 这里只是进一步确信,flag标记是否有反例for(i=0;i<n;i++){for(j=0;j<n && j!=i;j++){for(k=0;k<n && k!=j && j!=i;k++){if(GYS(a[i],GBS(a[j],a[k]))!=GBS(GYS(a[i],a[j]),GYS(a[i],a[k]))){flag=1;cout<<"因为"<<a[i]<<"∧("<<a[j]<<"∨"<<a[k]<<")!=("<<a[i]<<"∧"<<a[j]<<")∨("<<a[i]<<"∧"<<a[k]<<"),所以这不是一个布尔格。\n";//验证a∧(b∨c)==(a∧b)∨(a∧c) break;}if(GBS(a[i],GYS(a[j],a[k]))!=GYS(GBS(a[i],a[j]),GBS(a[i],a[k]))){flag=1;cout<<"因为"<<a[i]<<"∨("<<a[j]<<"∧"<<a[k]<<")!=("<<a[i]<<"∨"<<a[j]<<")∧("<<a[i]<<"∨"<<a[k]<<"),所以这不是一个布尔格。\n";//验证a∨(b∧c)==(a∨b) ∧ (a∨c) break;}}if(flag)break;
}if(flag){break;}if(!flag){cout<<"因为所有成员都满足分配性,所以这是一个分配格。\n";break;}
}
}

运行结果:

​​​​​​​ 


http://chatgpt.dhexx.cn/article/apdCLaq9.shtml

相关文章

组合学笔记(六)局部有限偏序集的关联代数,Möbius反演公式

tags: Combinatorics 写在前面 前面铺垫了很多偏序集和格,分配格等的基本知识, 下面开始以这些代数结构为研究对象, 探寻其上的一些性质与关系, 我们先以关联代数的定义开始说起. 关联代数简介 定义 令 I n t ( P ) \mathrm{Int}(P) Int(P)表示 P P P上所有的区间的集合, …

离散中偏序集、乘积群、关系的性质和集合的相关证明

离散证明题&#xff08;三&#xff09; 9.令❄是定义在有限集合A上的一个二元运算&#xff0c;若对于∀a,b∈A&#xff0c;❄满足①aa❄a②a❄bb❄a③a❄(b❄c)(a❄b)❄c,在A上定义一个关系C比如a≤b<>aa❄b. 证明&#xff1a;(1)(A,≤)是一个偏序集 (2)∀a,b∈A,a∧ba❄…

偏序关系以及最大元,最小元,极大,极小元和上下界与上下确界

偏序关系的定义 偏序关系就是自反&#xff0c;反对称&#xff0c;传递的序偶集合。其中满足偏序的集合我们一般称为A&#xff0c;偏序关系一般称为R。 A*A产生的序偶有很多&#xff0c;所以我们使用<A,R>去表示满足某个偏序关系的A中元素的子集。 如果使用图像画这个偏序…

上偏续关系哈斯图_[离散]哈斯图偏序集--最好理解版本

离散数学哈斯图的画法 两个步骤&#xff1a;(1)排点的层数 (2)把有关系的点连接起来 看一道题&#xff1a;设A{1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;6&#xff0c;8&#xff0c;9}&#xff0c;偏序集S{A,《},其中《为整除关系&#xff0c;画出S的哈斯图 首先把…

【集合论】序关系 ( 偏序集元素之间的关系 | 可比 | 严格小于 | 覆盖 | 哈斯图 )

文章目录 一、可比二、严格小于三、覆盖四、哈斯图 一、可比 可比 : A A A 集合 , 该集合上存在 偏序关系 ≼ \preccurlyeq ≼ 小于等于 , 偏序集 是 集合 和 偏序关系 组成的有序对 < A , ≼ > <A, \preccurlyeq> <A,≼> , x , y x, y x,y 是 A A A 集…

等价关系偏序关系全序关系

等价关系 , 并且 , 如果 R是自反&#xff0c;对称&#xff0c;传递的&#xff0c;称R为A上的等价关系。 偏序关系 &#xff0c;并且 , 如果 R是自反: (每个元素都和自身有关系)&#xff1b; 反对称&#xff1a;如果有&#xff0c;则,否则&#xff0c;不能同时存在 &#xf…

如何从哈斯图判断一个偏序集是不是格?

离散数学中&#xff0c;格的定义如下&#xff1a; 设 < S , ≼ > < S, \preccurlyeq> <S,≼>是偏序集&#xff0c;如果 ∀ x , y ∈ S , { x , y } \forall x,y\in S, \{x,y\} ∀x,y∈S,{x,y}都有最小上界和最大下界&#xff0c;则称 S S S关于偏序 ≼ \pre…

对接阿里云的短信接口发送手机验证码

最近做的项目涉及到对接阿里云的短信接口实现用户注册时发送验证码&#xff0c;我们在一个网站进行注册时要用到手机号获取验证码&#xff0c;这是很常见的操作。本篇博客记录如何对接阿里云的短信接口用手机号获取验证码&#xff0c;步骤如下&#xff1a; 1、对接阿里云短信接…

用Python模拟识别图片验证码并发送手机验证码

1、导语 大家好&#xff0c;好久不见。又到每日分享Python小技能的时候了。最近因为疫情影响&#xff0c;所以更新内容比较慢…今天周一&#xff0c;就来更新一波&#xff0c;心血来潮&#xff0c;是时候上线经营了。其实也没想到有啥好分享的&#xff0c;不如分享一些干货给大…

springboot发送短信验证码

学习目标&#xff1a; 阿里云短信服务 准备工作&#xff1a; 注册阿里云账户开通短信服务申请签名和模板拿到AccessKey 大概说一下测试和申请流程&#xff0c;输入https://www.aliyun.com/进入官网&#xff0c;然后注册账号&#xff0c;直接在搜索框输入短信服务就能找到&…

SpringBoot 通过阿里云的短信功能 实现发送手机验证码

我们在项目中经常遇到 需要通过手机号发送验证码实现登录注册等功能。 这里讲一下&#xff0c;Springboot项目中如果通过阿里云的短信功能&#xff0c; 实现发送手机验证码并验证 一、准备工作 1、购买阿里云的短信服务 https://free.aliyun.com/product/cloudcommunication-…

使用node实现向手机发送验证码

步骤一&#xff1a;安装node.js Node官方网站https://nodejs.org/en/ 下载node.js 安装好之后输入 node -v 能够显示版本号表示安装成功了 步骤二&#xff1a;注册并登陆聚合科技&#xff0c;申请短信API服务 我们来到聚合科技的官网中https://www.juhe.cn/ &#xff0c;注册…

项目接入腾讯云短信服务SMS实现向用户发送手机验证码

1、自述 早在18年的时候&#xff0c;我就在项目中使用过阿里云的短信服务&#xff0c;现在我上阿里云短信控制台看&#xff0c;还能看到当时创建的短信签名&#xff0c;如下图所示。 出于某种原因&#xff0c;我现在想重新申请一个新的签名&#xff0c;却审批失败了&#xf…

SpringBoot+vue 使用阿里云的短信功能发送手机验证码

前言&#xff1a; 小编后端用的是Springboot 前端用的是vue ,小编主要是写后台&#xff0c;前端页面比较简陋&#xff0c;后期还要调优&#xff0c;写的不对处还望多多包涵。 环境&#xff1a; 需要先准备好阿里云的账号和一些必要的参数。详情见我的另一篇博客。 https://blo…

腾讯云短信服务实现 Java 发送手机验证码(SpringBoot+Redis 实现)

文章目录 腾讯云短信服务实现 Java 发送手机验证码&#xff08;SpringBootRedis 实现&#xff09;1、打开腾讯云短信服务2、创建短信签名3、创建短信正文模板4、等待全部审核完毕即可5、发送短信6、短信业务实战&#xff08;SpringBootRedis&#xff09;&#xff08;1&#xff…

Spring boot 发送手机验证码

由于阿里云现在的短信签名无法通过申请&#xff0c;所以我这里选择了中国网建SMS短信平台&#xff08;手机号注册即用&#xff0c;有免费赠送的几条短信测试&#xff09; demo代码地址&#xff1a;https://github.com/mer97/springboot-sendmessage Spring boot 实现发送手机验…

Java实现发送手机验证码,发送短信

要发送短信&#xff0c;我们需要第三方提供的短信接口&#xff0c;这里我使用阿里云的短信服务。 首先进入阿里云的官网&#xff0c;然后注册。登陆之后选择云通信——》短信服务 然后点击免费开通。 开通后进入控制中心&#xff0c;选择右上方的支持与服务&#xff0c;选择帮…

Java实现手机发送短信验证码

发送短信验证码首先要在互亿无线短信平台去开通短信服务,地址"ihuyi.com" 一定要留好自己申请的API ID,API key和模板参数说明:代码示例: pom导包 <!-- 短信 --> <dependency><groupId>dom4j</groupId><artifactId>dom4…

SSM发送手机验证码——以网建SMS为例

整理一下从大二开始写的东东 后台源码链接&#xff1a; 点我自取 到网建申请一个帐号&#xff0c;好像可以免费用10条短信 设置用户名、密钥&#xff0c;在发送的时候需要携带该信息 前端代码简化后如下&#xff0c;提交表单我用的是ajax&#xff0c;如果直接提交表单记得name…

Java实现发送手机验证码

向手机发送验证码在用户注册等等业务中会用到&#xff0c;下面我来介绍如何用Java实现向手机发送验证码。 笔者此处使用的是阿里云的短信服务&#xff0c;首先需要登录阿里云官方网站&#xff0c;找到并开通短信服务&#xff0c;然后需要申请短信签名和模版&#xff0c; 短信签…