用质因数求解最大公约数(gcd)和最小公倍数(lcm)

用质因数求解最大公约数(gcd)

思路分析:

1、质因数:(素因数或质因子)他指的是能整除给定正整数的质数。例如:36可以分解为223*3,其中2和3就是质因数。
2、质因数求解最大公约数:
对每个数进行质因数分解;
找出所有数的共有质因数,并取每个共有质因数的最低次幂;
将这些最低次幂的质因数想乘,得到的结果就是这些数的最大公约数。
gcd(a,b)=pi的min(ai,bi)次方 * pj的min(aj,bj)次方

code:

#include <iostream>
#include <unordered_map>
#include <cmath>// 辅助函数:检查一个数是否是质数
bool is_prime(int n) {if (n <= 1) return false;if (n <= 3) return true;if (n % 2 == 0 || n % 3 == 0) return false;for (int i = 5; i * i <= n; i += 6) {if (n % i == 0 || n % (i + 2) == 0)return false;}return true;
}// 辅助函数:找到并返回一个数的所有质因数及其次数
std::unordered_map<int, int> find_prime_factors(int n) {std::unordered_map<int, int> factors;for (int i = 2; i <= std::sqrt(n); ++i) {while (n % i == 0) {factors[i]++;n /= i;}}// 如果n仍然大于1,那么它本身就是一个质数if (n > 1) {factors[n] = 1;}return factors;
}// 使用质因数分解来求解最大公约数
int gcd_by_prime_factors(int a, int b) {std::unordered_map<int, int> factors_a = find_prime_factors(a);std::unordered_map<int, int> factors_b = find_prime_factors(b);int gcd = 1;for (const auto& factor_a : factors_a) {int prime = factor_a.first;int count_a = factor_a.second;// 查找b的质因数中是否有prime,并取其最小次数auto iter_b = factors_b.find(prime);if (iter_b != factors_b.end()) {int count_b = iter_b->second;int min_count = std::min(count_a, count_b);gcd *= std::pow(prime, min_count);}}// 还需要考虑b中独有的质因数(如果a中没有的话)for (const auto& factor_b : factors_b) {if (factors_a.find(factor_b.first) == factors_a.end()) {int prime = factor_b.first;int count_b = factor_b.second;// 但由于我们只关心共有的质因数,所以这里不增加gcd}}return gcd;
}int main() {int a = 24;int b = 36;std::cout << "GCD of " << a << " and " << b << " is: " << gcd_by_prime_factors(a, b) << std::endl;return 0;
}

用质因数求解最小公倍数(lcm)

思路分析:

1、质因数:(素因数或质因子)他指的是能整除给定正整数的质数。例如:36可以分解为223*3,其中2和3就是质因数。
2、质因数求解最小公倍数:
对每个数进行质因数分解;
找出所有数的共有质因数,并取每个共有质因数的最高次幂;
将这些最高次幂的质因数想乘,得到的结果就是这些数的最小公倍数。
lcm(a,b)=pi的max(ai,bi)次方 * pj的max(aj,bj)次方

code:

#include <iostream>
#include <unordered_map>
#include <cmath>// 辅助函数:找到并返回一个数的所有质因数及其次数
std::unordered_map<int, int> find_prime_factors(int n) {std::unordered_map<int, int> factors;for (int i = 2; i <= std::sqrt(n); ++i) {while (n % i == 0) {factors[i]++;n /= i;}}// 如果n仍然大于1,那么它本身就是一个质数if (n > 1) {factors[n] = 1;}return factors;
}// 使用质因数分解来求解最小公倍数
int lcm_by_prime_factors(int a, int b) {std::unordered_map<int, int> factors_a = find_prime_factors(a);std::unordered_map<int, int> factors_b = find_prime_factors(b);// 合并两个数的质因数,取最大次数for (const auto& factor_b : factors_b) {factors_a[factor_b.first] = std::max(factors_a[factor_b.first], factor_b.second);}// 计算最小公倍数int lcm = 1;for (const auto& factor : factors_a) {lcm *= std::pow(factor.first, factor.second);}return lcm;
}int main() {int a = 24;int b = 36;std::cout << "LCM of " << a << " and " << b << " is: " << lcm_by_prime_factors(a, b) << std::endl;return 0;
}

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

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

相关文章

ai和数据分析常用工具:jupyer基本使用

jupyter使用 打开终端cmd windowr&#xff1a;在弹出的对话款里输入cmd&#xff0c;就会打开你的电脑终端。 虚拟环境搭建 不同项目或许需要的环境的版本或者包的版本不同&#xff0c;因此可以给指定项目创建指定的虚拟环境进行开发环境和所使用包的管理。 列出所有环境&a…

一、安全完善度等级SIL(Safety Integrity Level)介绍

目录 一、背景 二、定义 2.1 相关概念介绍如下&#xff1a; 2.2 扩展 2.3 注意事项 一、背景 在轨道交通行业中&#xff0c;安全完善度等级&#xff08;SIL&#xff0c;Safety Integrity Level&#xff09;是一个至关重要的概念&#xff0c;它用于评估安全相关系统&#x…

Linux基础IO操作详解

C文件IO相关接口 fopen函数 pathname: 要打开的文件名字符串mode: 访问文件的模式 模式描述含义“r”读文件不存在失败返回null“r”读写文件不存在打开失败返回null&#xff0c;文件存在则从头开始覆盖现有的数据&#xff08;不会清空数据&#xff09;“w”写文件不存在创建…

【报错】【Ubuntu】/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34‘ not found

1 报错 /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34 not found 2 分析 系统中的GNU C Library(glibc)版本不满足要求。 具体来说,该程序或库需要使用2.34版本的glibc,但系统中当前的glibc版本不满足这个要求。 首先,查看版本: strings /lib/x86_64-linux…

接口响应和预览id不一样

解决方案 让后端加上这个注解 ]sonserialize(using Tostringserializer.class) private Long id;

第6天:文件操作和异常处理

学习目标 掌握如何在Python中进行文件读写操作理解文件的打开模式学习如何处理文件中的数据理解异常处理的基本概念掌握使用try、except、else和finally进行异常处理 学习内容 1. 文件操作 在Python中&#xff0c;文件操作包括打开文件、读写文件内容和关闭文件。 文件的打…

马斯克公布xAI Grok-2大语言模型将于8月推出;GPT-5仍需时日

&#x1f989; AI新闻 &#x1f680; 马斯克公布xAI Grok-2大语言模型将于8月推出 摘要&#xff1a;7月1日&#xff0c;马斯克在X平台宣布&#xff0c;其人工智能初创公司xAI的新大语言模型Grok-2将于8月推出。此前&#xff0c;xAI已发布了Grok-1.5和Grok-1.5 Vision模型。马…

运营商如何通过PCDN技术提高用户服务?

着互联网的快速发展&#xff0c;用户对网络速度和质量的要求越来越高。为了满足这些需求&#xff0c;内容分发网络(CDN)成为了关键的基础设施。而在CDN技术中&#xff0c;PCDN(PersonalCDN)作为一种新兴的技术&#xff0c;为运营商和用户提供了新的解决方案。本文将重点介绍PCD…

Drools开源业务规则引擎(一)- 安装与介绍

文章目录 [toc] Drools开源业务规则引擎&#xff08;一&#xff09;- 安装与介绍0.何为规则引擎1.Drools介绍1.1.依赖模块1.2.规则引擎 2.Drools安装2.1.依赖导入2.2.规则的输入和输出类型输入类型输出类型 2.3.创建规则文件2.4.构建可执行规则库2.5.执行结果&#xff1a; 3.Dr…

FreeRTOS的任务操作

文章目录 3 FreeRTOS任务操作3.1 创建task3.2 删除task3.2.1 空闲&#xff08;idle&#xff09;任务&#xff08;守护任务&#xff09;3.2.2 钩子&#xff08;Hook&#xff09;函数 3.3 设置&#xff0c;获取&#xff0c;task优先级3.3.1 设置任务优先级3.3.2 获取任务优先级 3…

自动驾驶---Motion Planning之多段五次多项式

1 前言 在之前的博客系列文章中和读者朋友们聊过Apollo的 Motion Planning方案: 《自动驾驶---Motion Planning之LaneChange》 《自动驾驶---Motion Planning之Path Boundary》 《自动驾驶---Motion Planning之Speed Boundary》 《自动驾驶---Motion Planning之轨迹Path优化》…

Oracle 上机

--1.&#xff08;3分&#xff09;查找每个部门的最高工资员工编号及其下属信息。 select e2.empno,e1.* from emp e1 join ( select * from emp where (deptno,sal) in (select deptno,max(sal) from emp group by deptno)) e2 on e1.mgr e2.empno; /* 2.&#xff08;5分&…

Spring Boot集成checkstyle快速入门Demo

1.什么是checkstyle&#xff1f; CheckStyle是一个帮助程序员来遵守一直的编码规范的工具。默认&#xff0c;它支持google 和sun 的java style guide。而且它是高度可配置的&#xff0c;允许自定义编码规范&#xff0c;并可以对各种IDE&#xff08;eclipse、Intellij&#xff…

昇思MindSpore学习笔记2-01 LLM原理和实践 --基于 MindSpore 实现 BERT 对话情绪识别

摘要&#xff1a; 通过识别BERT对话情绪状态的实例&#xff0c;展现在昇思MindSpore AI框架中大语言模型的原理和实际使用方法、步骤。 一、环境配置 %%capture captured_output # 实验环境已经预装了mindspore2.2.14&#xff0c;如需更换mindspore版本&#xff0c;可更改下…

前端在for循环中使用Element-plus el-select中的@click.native动态传参

<el-table ref"table" :data"editTableVariables" cell-dblclick"handleRowDblClick" style"width: 100%" > <!-- el-table-column: 表格列组件&#xff0c;定义每列的展示内容和属性 --><el-table-column prop&q…

8种数据迁移工具

前言 最近有些小伙伴问我&#xff0c;ETL数据迁移工具该用哪些。 ETL(是Extract-Transform-Load的缩写&#xff0c;即数据抽取、转换、装载的过程)&#xff0c;对于企业应用来说&#xff0c;我们经常会遇到各种数据的处理、转换、迁移的场景。 今天特地给大家汇总了一些目前…

【云原生】服务网格(Istio)如何简化微服务通信

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《未来已来&#xff1a;云原生之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、微服务架构的兴起 2、Istio&#xff1a;服务网格的佼…

服务器测评

服务器测评 Linux测评口令是否存在空口令账户密码长度和密码定期更换密码复杂度本地登录失败处理功能相关参数超时锁定sshd服务相关端口是否已经打开不允许root账户远程登录查看SELinux状态审计查看Linux中正在运行的服务查看已添加的iptables规则查看文件和目录的权限设置是否…

大文件上传是怎么做的

1. 分片上传 1. 把需要上传的文件按照一定的规则&#xff0c;分割成相同大小的数据块 2. 初始化一个分片上传任务&#xff0c;返回本次分片上传的唯一标识 3. 按照一定的规则把各个数据块上传 4. 发送完成后&#xff0c;服务端会判断数据上传的完整性&#xff0c;如果完整&a…