【蓝桥杯】GCD与LCM

一.概述

最大公约数(GCD)和最小公倍数(Least Common Multiple,LCM)

在C++中,可以使用 std::__gcd(a, b)来计算最大公约数

 1.欧几里德算法/辗转相除法

int gcd(int a,int b){return b?gcd(b, a%b):a;
}

2.lcm

int lcm(int a,int b){return a/gcd(a, b)*b;
}

3.gcd的性质

  1. gcd(a, b) = gcd(a, a+b) = gcd(a, k·a+b)
  2. gcd(ka, kb) = k·gcd(a, b)
  3. 多个整数的最大公约数:gcd(a, b, c) = gcd(gcd(a, b), c)。
  4. 若gcd(a, b) = d,则gcd(a/d, b/d) = 1,即a/d与b/d互素。这个定理很重要。
  5. gcd(a+cb, b) = gcd(a, b)
  6. 裴蜀定理:如果两个整数的最大公约数是d, 那么方程ax+by=d一定有解。

二.实战演练

1.等差数列

题目描述:

分析:

把n个数据排序,计算它们的间隔,对所有间隔做GCD,结果为公差。最少数量等于:(最大值-最小值)/公差+1。


代码实现:

//等差数列
#include<iostream>
#include<algorithm>using namespace std;const int N=1e5;long long n,a[N],gcdd=0;long long gcd(long long a,long long b){return b?gcd(b, a%b):a;
}int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n;for(long long i=0;i<n;i++){cin>>a[i];}sort(a, a+n);//0和任意一个数x的最大公约数是xfor(long long i=1;i<n;i++){gcdd=gcd(gcdd, a[i]-a[i-1]);}if(gcdd==0){cout<<n<<'\n';}elsecout<<(a[n-1]-a[0])/gcdd+1<<'\n';return 0;
}

2.Hankson的趣味题

题目描述:

 分析:

其实就是暴力,但是因为需要枚举的区间太大了,所以需要剪枝优化。

从1开始枚举到b1,但是这样枚举的空间就太大了,所以需要优化。

如果这个数能够被b1整除,那么才需要去接着进行判断。

另外一个就是通过分解因子,x*y=b1。

代码实现:

//Hankson的趣味题
#include<bits/stdc++.h>using namespace std;long long gcd(long long a,long long b){return b?gcd(b, a%b):a;
}long long lcm(long long a,long long b){return a/gcd(a, b)*b;
}int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n;cin>>n;while(n--){long long a1,a0,b1,b0;cin>>a0>>a1>>b0>>b1;int ans=0;for(long long i=1;i<=sqrt((double)b1);i++){if(b1%i==0){if(gcd(i,a0)==a1&&lcm(i,b0)==b1){ans++;}long long y=b1/i;if(y==i){continue;}else{if(gcd(y, a0)==a1&&lcm(y,b0)==b1){ans++;}}}}cout<<ans<<'\n';}return 0;
}

3.最大比例

题目描述:

 问题分析:

对于该题,将输入进来的数据先排序。

我们可能会想,能不能用xn/xn-1来获得这个比值呢?也就是说依次的去做除法,然后找到这些倍数的最大公约数。

这个题最烦人的点在于,输出是一个分数,那我们就不得不分别的去处理分子与分母了。

可以分别去找分子和分母的最大公约数。

这个比值的获取,可以通过xn/xn-1,也可以通过xn/x0.

代码实现:

//最大比例
#include<iostream>
#include<algorithm>using namespace std;const int N=105;long long x[N],a[N],b[N];
int n;
//此函数是用来求 a^{n1} a^{n2} 中的a的
long long gcd_sub(long long a,long long b){if(a<b){swap(a, b);}if(b==1)return a;return gcd_sub(b, a/b);
}long long gcd(long long a,long long b){return b?gcd(b, a%b):a;
}int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);long long cnt=0;cin>>n;for(int i=0;i<n;i++){cin>>x[i];}//排序sort(x,x+n);for(int i=1;i<n;i++){//获取分子和分母long long d=gcd(x[i], x[0]);a[cnt]=x[i]/d;b[cnt]=x[0]/d;cnt++;}long long up=a[0],down=b[0];for(int i=1;i<cnt;i++){up=gcd_sub(a[i], up);down=gcd_sub(b[i], down);}cout<<up<<'/'<<down<<'\n';return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/794647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tensorboard以及Transforms初步学习

一.前情提要 1.本文是代码结合知识点&#xff0c;注释即为知识点 2.主要详细讲解Tensorboard以及Transforms代码以及基础知识 3.若想深入学习&#xff0c;建议阅读 P3. Python学习中的两大法宝函数&#xff08;当然也可以用在PyTorch&#xff09;_哔哩哔哩_bilibili 二.简述…

抖音运营技巧

1、视频时长 抖音的作品是否能够继续被推荐&#xff0c;取决于综合数据&#xff0c;包括完播率、点赞率、评论率、转发率和收藏率等。其中&#xff0c;完播率是最容易控制的因素。对于新号来说&#xff0c;在没有粉丝的初期&#xff0c;发布过长的视频可能会导致无人观看。因此…

金田金业带你一文了解现货黄金开户注意事项

现货黄金作为一种受欢迎的投资品种&#xff0c;吸引了越来越多的投资者。然而&#xff0c;在进行现货黄金开户时&#xff0c;有一些重要的注意事项需要牢记。本文将为您详细介绍现货黄金开户的九大关键要点&#xff0c;确保您能够在投资过程中做出明智的决策。 第一&#xff0c…

Java- maven下载jar包,提示找不到,Could not find artifact

1、执行下面命令行 mvn install:install-file -Dfile/home/quangang/桌面/isv-sdk-2.0.jar -DgroupIdcom.jd -DartifactIdisv-sdk -Dversion2.0 -Dpackangjar 2、然后这里要加上jar包

No dashboards are active for the current data set.

再次记录一下这个离谱的问题 之前出现这个问题是因为目录没写对 今天遇到这个问题的原因是目录是对的&#xff0c;跟目录是否带有中文也没关系 是writer写入的时候写的是空的&#xff0c;离谱的是写入是空的情况下也会生成events日志文件&#xff0c;看起来好像成功写入了一样&…

Spring源码解析上

spring源码解析 整体架构 defaultListableBeanFactory xmlBeanDefinitionReader 创建XmlBeanFactory 对资源文件进行加载–Resource 利用LoadBeandefinitions(resource)方法加载配置中的bean loadBeandefinitions加载步骤 doLoadBeanDefinition xml配置模式 validationMode 获…

2024-04-05 问AI: 介绍一下深度学习中的Leaky ReLU函数

文心一言 Leaky ReLU&#xff08;Leaky Rectified Linear Unit&#xff09;函数是深度学习领域中的一种激活函数&#xff0c;主要用于解决ReLU&#xff08;Rectified Linear Unit&#xff09;函数在负值区域为零的问题。ReLU函数在输入为正时保持原样&#xff0c;而在输入为负…

nodejs实现TCP端口转发并截包的小工具

近期我正致力于开发一个基于 Go-CQHTTP 的 QQ 机器人应用程序项目&#xff0c;该项目现已成功实现了 Go-CQHTTP 的容器化部署&#xff0c;利用 Docker 技术确保其运行环境的一致性与便捷性。随着项目推进&#xff0c;接下来的工作重心转向部署配套的签名服务器&#xff08;qsig…

软考111-上午题-【计算机网络】-URL和DNS

一、URL解析 org&#xff1a;各类组织结构&#xff08;非盈利团队&#xff09; 1-1、顶级域 顶级域名是域名的最后一个部分&#xff0c;即是域名最后一点之后的字母&#xff0c;例如&#xff1a;www.baidu.com这个域名中&#xff0c;顶级域是.com&#xff08;或.COM&#xff…

数据结构系列-队列的结构和队列的实现

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 队列 队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO&#xff0c;…

全面解析找不到msvcr110.dll,无法继续执行代码的解决方法

MSVCR110.dll的丢失可能导致某些应用程序无法启动。当用户试图打开依赖于该特定版本DLL文件的软件时&#xff0c;可能会遭遇“找不到指定模块”的错误提示&#xff0c;使得程序启动进程戛然而止。这种突如其来的故障不仅打断了用户的正常工作流程&#xff0c;也可能导致重要数据…

基于SpringBoot+微信小程序的农产品销售平台

一、项目背景介绍&#xff1a; 随着人们收入的不断增加、生活水平的普遍提高,对生活质量的要求也日益凸显。而作为关乎每个人的生命、健康安全的食品卫生、质量无疑更被人们所重视。所以,… 2. 其他国家的绿色有机食品所占其国家食品市场比重比较大,如德国在99年便已达到40%,美…

Mac反编译APK

文章目录 第一种方式: brew installapktool 使用说明dex2jar 使用说明 第二种方式: 下载安装包apktool 使用说明 (根据官方介绍没有操作成功,后续成功再更新这里)dex2jar 使用说明 安装 JD-GUI 查看jar包中的class文件JD-GUI 使用说明 第一种方式: brew install 安装过程可能很…

使用 mitmproxy 抓包 grpc

昨天在本地执行 grpc 的 quick start&#xff08;python版本的&#xff09;&#xff0c;我了解 grpc 内部使用的是 HTTP2&#xff0c;所以我就想着抓包来试试&#xff0c;下面就来记录一下这个过程中的探索。 注意&#xff1a;我的电脑上面安装了 Fiddler Classic&#xff0c;…

微信小程序生命周期管理:从数据初始化到事件绑定

作为一个独立的应用开发平台,微信小程序提供了自己的生命周期机制,与我们熟悉的Vue.js框架有一些差异。掌握小程序生命周期的特点和使用技巧,对于开发高质量的小程序应用至关重要。深入理解和掌握小程序生命周期的使用技巧,将有助于我们构建出更加健壮和可维护的小程序应用。 小…

可视化大屏 - 项目1

文章目录 技术栈echarts 可视化需求分析代码实现 技术栈 flexible.js rem 实现不同终端下的响应式布局&#xff0c;根据不同屏幕宽度&#xff0c;自适配布局&#xff1b; html中引入index.js&#xff0c;可以改名为flexible.js&#xff1b;默认划分10份&#xff0c;可以自己修…

Linux存储的基本管理

实验环境&#xff1a; 系统里添加两块硬盘 ##1.设备识别## 设备接入系统后都是以文件的形式存在 设备文件名称&#xff1a; SATA/SAS/USB /dev/sda,/dev/sdb ##s SATA, dDISK a第几块 IDE /dev/hd0,/dev/hd1 ##h hard VIRTIO-BLOCK /de…

SQLAlchemy 建立数据库模型之间的关系

常见关系&#xff1a; 一对多关系多对一关系多对多关系一对一关系 一对多关系&#xff08;一个作者&#xff0c;多篇文章&#xff09; ## 一对多关系&#xff0c;单作者-多文章&#xff0c;外键不可少 ## 外键(ForeignKey)总在多的那边定义,关系(relationship)总在单的那边定…

gitee代码上传同步指南(git操作)

1.下载安装git 最开始安装git&#xff0c;下载链接&#xff1a;CNPM Binaries Mirror 选择对应版本下载git即可 2.生成ssh公钥 电脑桌面右键&#xff0c;选择Open Git Bash here 需要注意&#xff0c;在git中复制粘贴功能和windows不同&#xff0c;它有两种方式&#xff…