ACM题解Day8 | 最小公倍数 GCD 模块 |最小共倍数,等差数列,后缀表达式

news2024/10/1 3:34:46

学习目标:

博主介绍: 27dCnc
专题 : 数据结构帮助小白快速入门算法
👍👍👍👍👍👍👍👍👍👍👍👍
☆*: .。. o(≧▽≦)o .。.:*☆

Github今日打卡
fggh

  • ACM题解

学习时间:

  • 周一至周五晚上 7 点—晚上9点
  • 周六上午 9 点-上午 11 点
  • 周日下午 3 点-下午 6 点

学习内容:

  1. 最小共倍数
  2. 等差数列
  3. 后缀表达式

内容详细:

最小共倍数

题目考点: 最小共倍数 最大共约数

在这里插入图片描述

题目要点: 理解 最大公约数 和 理解 最小公倍数的关系

辗转相除最大公约数

辗转相除法(又称欧几里德算法)用于求解两个整数的最大公约数(Greatest Common Divisor,简称 GCD),也可以扩展为求解多个整数的最大公约数。

辗转相除法的基本思想是通过一系列的除法操作,将两个整数逐渐缩小为它们的余数,直到余数为 0。最后一个非零余数就是这两个整数的最大公约数。

具体步骤如下:

  1. 将较大的整数除以较小的整数,得到商和余数。
  2. 如果余数为 0,则较小的整数就是最大公约数。
  3. 如果余数不为 0,则将较小的整数作为被除数,余数作为除数,继续执行第一步。
  4. 重复执行步骤 1 和 3,直到余数为 0,最后一个非零余数就是最大公约数。

辗转相除法的优点是简单、高效,能够快速求解两个整数的最大公约数。它在数论和计算机科学中被广泛应用,例如在分数的化简、判断两个数是否互质、模运算的逆元计算等场景中都有重要的作用。

辗转相除法代码

inline int gcd(int a, int b) { //经典代码
    int r;
    while(b > 0) {
        r = a % b;
        a = b;
        b = r;
    }
    return a;
}

递归

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

最小公倍数

代码

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

代码解释

这段代码是用于计算两个整数 a 和 b 的最小公倍数(Least Common Multiple,简称 LCM)。

在这段代码中,调用了一个名为 gcd 的函数,用于计算 a 和 b 的最大公约数。最小公倍数可以通过以下公式计算得到:

LCM(a, b) = a * b / GCD(a, b)

因此,这段代码的作用就是先计算 a 和 b 的最大公约数,然后通过上述公式求解它们的最小公倍数。

具体来说,这个函数首先将 a 和 b 相乘得到它们的乘积,然后除以它们的最大公约数,从而得到它们的最小公倍数。

最小公倍数在数学和计算机科学中都有广泛的应用,例如在分数的通分、同时执行多个周期性任务等场景中都需要用到最小公倍数。

综上所述题目详细代码

#include<bits/stdc++.h>
#define Run 0
#define endl "\n"
#define N 100005
using unl = __int128_t;
using ll = long long;
using namespace  std;

class Solution {
public: //就是一个数的所有公倍数
     void solve() {
        int n,m; cin >> n >> m;
        cout << lcm(n,m) << endl;
    }
    
    int gcd(int a,int b) {
    return b > 0 ? gcd(b,a%b):a;
	}
	
    int lcm(int a, int b) {
        return (a * b) / gcd(a, b);
    }
};

signed main() {

    cin.tie(0) -> ios::sync_with_stdio(0);
    cout.tie(0) -> ios::sync_with_stdio(0);

    #if Run
        int _;cin>>_;while(_--) Solution().solve();
    #else
        Solution().solve();
    #endif

    return 0;
}

等差数列

题目考点: 最小共倍数
在这里插入图片描述
掌握: 最小公倍数 等差数列的 d 为各项间最小公倍数

代码

#include<bits/stdc++.h>
#define Run 0
#define endl "\n"
#define N 100005
using unl = __int128_t;
using ll = long long;
using namespace  std;

class Solution {
public: 
    int gcd(int a,int b)  //欧几里得算法 
    {
        return b?gcd(b,a%b):a; //b不为0 
    }
     void solve() {
        int n; cin >> n;
        int a[n + 5];
        for (int i = 1; i <= n; i++) {
            cin >> a[i];
        }
        sort(a + 1, a + 1 + n);
        int d = 0;
        for (int i = 2; i <= n; i++) {
            d = gcd(d, a[i] - a[i - 1]);
        }
        if (d) cout << (a[n] - a[1] )/ d + 1 << endl; // 数列长度,当前最大项即最后一项
        else cout << n << endl; //如果d == 0 则说明只有n项无法确定有多少项就n项
    }
};


signed main() {

    cin.tie(0) -> ios::sync_with_stdio(0);
    cout.tie(0) -> ios::sync_with_stdio(0);

    #if Run
        int _;cin>>_;while(_--) Solution().solve();
    #else
        Solution().solve();
    #endif

    return 0;
}

初识前缀和 后缀表达式

题目考点: 前缀和
在这里插入图片描述

思路:前缀和

代码

#include<bits/stdc++.h>
#define Run 0
#define endl "\n"
#define N 100005
using unl = __int128_t;
using ll = long long;
using namespace  std;

class Solution {
public: 
     void solve() {
        ll n,m; 
        while(cin >> n >> m) {
            vector<ll>a(n + m + 100); //用于储存数据
            ll res = 0; //初始化当前值
            for (ll i = 1; i <= n + m + 1; i++) cin >> a[i]; //输入值
            sort(a.begin() + 1,a.begin() + n + m + 2); //排序保证减的最小化
            if(m == 0) { 
                for (ll i = 1; i <= n + m + 1; i++)  res += a[i]; //如果没有负号则为前缀和
            } else { //不为0
                res = a[n + m + 1] - a[1]; //向减去最小的那个然后前缀和
                for (ll i = 2; i <= n + m; i++) res += a[i];
            }
            cout << res << endl; //最后输出答案
        }
    }
};


signed main() {

    cin.tie(0) -> ios::sync_with_stdio(0);
    cout.tie(0) -> ios::sync_with_stdio(0);

    #if Run
        int _;cin>>_;while(_--) Solution().solve();
    #else
        Solution().solve();
    #endif

    return 0;
}

这段代码实现了一个解题类Solution,其中包含一个solve()函数用于解决特定问题。让我们详细解析一下代码的功能:

  1. 宏定义部分:

    • 定义了宏Run为0,表示不运行多组测试数据。
    • 定义了换行符endl为"\n"。
    • 定义了常量N为100005。
  2. 类定义部分:

    • Solution类中定义了一个solve()函数,用于解决问题。
  3. solve()函数:

    • 该函数首先读入两个整数n和m。
    • 然后定义了一个大小为n+m+100的vector数组a,用来存储输入的n+m+1个整数。
    • 接着使用循环将n+m+1个整数读入数组a中。
    • 对数组a进行从第2个元素到第n+m+1个元素的排序。
    • 根据m的值,计算出结果res:
      • 若m为0,则将所有元素相加得到结果。
      • 若m不为0,则结果为最大元素减去最小元素再加上除去最大最小元素外的其他元素之和。
    • 最后输出结果res。
  4. 主函数main():

    • 设置了输入输出流的同步。
    • 根据宏定义Run的取值,决定是否进行多组测试数据的输入输出。
    • 如果Run为真,则会读入一个整数_,然后循环_次调用Solution的solve()函数。
    • 否则直接调用一次solve()函数。

总体来说,这段代码的功能是输入一组数据,根据一定规则计算结果并输出。如果有具体的问题描述,可以更清楚地理解代码的作用。


学习产出:

  • 技术笔记 2 遍
  • CSDN 技术博客 3 篇
  • 习的 vlog 视频 1 个

在这里插入图片描述

重磅消息:

GTP - 4 最新版接入服务他来了 点击链接即可查看详细

GTP - 4 搭建教程

🔥如果此文对你有帮助的话,欢迎💗关注、👍点赞、⭐收藏、✍️评论,支持一下博主~

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

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

相关文章

线性表——单链表的增删查改(上)

本节复习链表的增删查改 首先&#xff0c; 链表不是连续的&#xff0c; 而是通过指针联系起来的。 如图&#xff1a; 这四个节点不是连续的内存空间&#xff0c; 但是彼此之间使用了一个指针来连接。 这就是链表。 现在我们来实现链表的增删查改。 目录 本节函数接口列表…

飞机订票系统

飞机订票系统 获取源码——》公主号&#xff1a;计算机专业毕设大全

历尽千辛万苦,终于将CSDN博客等级提升到6级,拥有了自定义域名

近些时间感觉百度对我们个人博客网站不太友好&#xff0c;不单是低质站点被清退&#xff0c;而且正常的站点sitemap.xml权限也被收回或仅剩1条&#xff0c;API普通收录提交数量也猛跌到10条&#xff0c;所以只能多发展其他自媒体平台了。 幸好boke112百科以前玩过一段时间的CS…

紫外-可见吸收光谱法(UV-Vis)是最常用吸收光谱技术 市场持续扩大

紫外-可见吸收光谱法&#xff08;UV-Vis&#xff09;是最常用吸收光谱技术 市场持续扩大 紫外-可见吸收光谱法&#xff0c;也称为紫外-可见分光光度法&#xff0c;简称UV-Vis&#xff0c;利用样品分子在紫外和可见光激发下产生电子能级跃迁形成的吸收光谱&#xff0c;对元素进行…

qt debug和release运行都没问题打包之后运行不了

&#x1f482; 个人主页:pp不会算法^ v ^ &#x1f91f; 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主 &#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 问题 qt debug和release运行都没问题打包之后运行不了 原因 环…

Jquery中的事件与动画

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 本章目标 使用常用简单事件制作网页特效使用鼠标事件制作主导航特效使用hover()方法制作下拉菜单特效使用鼠标事件及动画制作页面特效 一.Jquery事件概述 二.基础事件 鼠标事件 演示案例&…

【激光SLAM】基于图优化的激光SLAM 方法(Grid-based)

文章目录 Graph-based SLAM数学概念 非线性最小二乘(Non-Linear Least Square)解决的问题误差函数线性化流程 非线性最小二乘在SLAM中的应用图的构建&#xff08;SLAM前端&#xff09;误差函数误差函数的线性化固定坐标系构建线性系统求解 Cartographer介绍 Graph-based SLAM …

PROTEL

PROTEL是什么 Protel软件是由Altium公司&#xff08;原为Protel Technology公司&#xff09;开发的一款电子设计自动化&#xff08;EDA&#xff09;软件&#xff0c;主要用于电子电路设计和印制电路板&#xff08;PCB&#xff09;制作。 学习Protel 99 SE的大致过程 原理图文…

阿里云服务器ECS u1实例性能怎么样?

阿里云服务器ECS u1实例&#xff0c;2核4G&#xff0c;5M固定带宽&#xff0c;80G ESSD Entry盘优惠价格199元一年&#xff0c;性能很不错&#xff0c;CPU采用Intel Xeon Platinum可扩展处理器&#xff0c;购买限制条件为企业客户专享&#xff0c;实名认证信息是企业用户即可&a…

BIO实战、NIO编程与直接内存、零拷贝深入辨析

BIO实战、NIO编程与直接内存、零拷贝深入辨析 长连接、短连接 长连接 socket连接后不管是否使用都会保持连接状态多用于操作频繁&#xff0c;点对点的通讯&#xff0c;避免频繁socket创建造成资源浪费&#xff0c;比如TCP 短连接 socket连接后发送完数据后就断开早期的http服…

mybatis总结传参三

十、&#xff08;不推荐&#xff09;多个参数-按位置传参 参数位置从 0 开始&#xff0c; 引用参数语法 #{ arg 位置 } &#xff0c; 第一个参数是 #{arg0}, 第二个是 #{arg1} 注意&#xff1a; mybatis-3.3 版本和之前的版本使用 #{0},#{1} 方式&#xff0c; 从 myba…

Android基础进阶 - RecyclerView列表加载多类型视图

你是否会经常见到在同一个 RecyclerView 列表中加载多种不同的布局效果&#xff1f;最近写了一篇 ConcatAdapter 相关内容&#xff0c;发现虽然之前一直在使用多类型视图列表&#xff0c;但从未记录过&#xff0c;故重新记录于此 RecyclerView基础 Android进阶之路 - Recycler…

一文读懂 Python 值传递和引用传递

文章目录 版本前言形参和实参值传递和引用传递Python 变量存储值语义和引用语义值语义引用语义 探讨 Python 值传递和引用传递不可变&#xff08;immutable&#xff09;类型可变&#xff08;mutable&#xff09;类型案例一案例二 拓展&#xff1a;不可变类型真的不可变&#xf…

C++Lambda表达式介绍

C11中引入了Lambda表达式&#xff0c;Lambda表达式是一种匿名函数&#xff0c;它可以在需要函数的地方直接定义和使用&#xff0c;而无需显式地定义一个函数。 lambda表达式 Lambda表达式语法定义 [capture-list](parameters) -> return-type { statement } capture-lis…

Linux服务器节点性能问题排查和优化思路

Linux服务器节点性能问题排查和优化思路 1. atop安装2. 整体思路2.1 如果现场存在/能复现2.2 如果现场不能复现&#xff1a; 3. 高负载问题排查与应对3.1. hung task 问题3.2. 底层硬盘/文件系统无法写入3.3. IO性能不足导致的运行缓慢3.4. CPU 性能不足导致的运行缓慢&#xf…

Go语言必知必会100问题-05 接口污染

接口污染 在Go语言中&#xff0c;接口是我们设计和编写代码的基石。然而&#xff0c;像很多概念一样&#xff0c;滥用它是不好的。接口污染是指用不必要的抽象来编写代码&#xff08;刻意使用接口&#xff09;&#xff0c;使得代码更难以理解。这是具有不同习惯&#xff0c;特…

linux常用的网络命令实战分享

文章目录 ifup/down命令ifconfig命令观察网络接口信息修改接口参数增加虚拟网络接口 route命令查看路由表增加路由表规则删除路由表规则 IP 命令ip linkip addr设定路由 ip route arp 命令 在实际研发运维工作中常常会涉及到网关相关的操作和知识&#xff0c;这里对linux下常用…

玩转ChatGPT:参考文献速查

一、写在前面 各位大佬&#xff0c;我又回来了&#xff0c;最近2月太忙啦&#xff08;过年、奶娃、本子、材料、结题&#xff09;&#xff0c;断更了。现水一篇证明我还活着&#xff01;&#xff01;&#xff01; 最近在写国自然本子&#xff0c;遇到一个估计大家都会遇到的问…

FMM 笔记:FMM(colab上执行)【官方案例解读】

在colab上运行&#xff0c;所以如何在colab上安装fmm&#xff0c;可见FMM 笔记&#xff1a;在colab上执行FMM-CSDN博客 fmm见&#xff1a;论文笔记&#xff1a;Fast map matching, an algorithm integrating hidden Markov model with precomputation_ubodt(upper bounded ori…

离散数学——树思维导图

离散数学——树思维导图 文章目录 前言内容大纲参考 前言 这是当初学习离散数学时整理的笔记大纲&#xff0c;其中包含了自己对于一些知识点的体悟。现将其放在这里作为备份&#xff0c;也希望能够对你有所帮助。 当初记录这些笔记只是为了在复习时更快地找到对应的知识点。…