辗转相除以及辗转相减法

news2025/1/11 14:50:19

文章目录

  • 前言
  • 辗转相除法(又名欧几里算法)
  • 辗转相减法(又名更相减损法)
    • 原始辗转相减法
    • 改版辗转相减法(减的是指数)
  • 参考文章

前言

在学习Acwing c++蓝桥杯辅导课第八讲数论-AcWing 1223. 最大比例时有使用到求指数的最大公约数,这里来记录下知识点。

当前文章已收录到博客文件目录索引:博客目录索引(持续更新)

辗转相除法(又名欧几里算法)

应用:辗转相除实际也就是欧几里得算法,主要是求两个整数的最大公约数

举例:gcd(52,53) = 52

注意:而针对于指数形式的要求得的最大公约数则需要使用辗转相减法。

代码:时间复杂度O(logn)。

class Solution {

    //欧几里得算法(辗转相除法)
    public static int gcd(int a, int b) {
        if (b == 0) return a;
        return gcd(b, a % b);
    }

    public static void main(String[] args) {
        System.out.println(gcd(12, 5));
    }
}

辗转相减法(又名更相减损法)

原始辗转相减法

场景:更相减损术是出自《九章算术》的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合。

原理:gcd(a,b)=gcd(b,a−b)。

代码实现:

public static int gcd_sub(int a, int b) {
    while (a != b) {
        if (a > b) {
            a = a - b;
        } else {
            b = b - a;
        }
    }
    return a;
}

改版辗转相减法(减的是指数)

算法题:AcWing 1223. 最大比例

通过辗转相减法gcd(x,y) = gcd(y,x%y) = gcd(y,x−y)来进行推导:f(px,py) = pgcd(x,y) = pgcd(y,x−y) = f(py,p(x−y)) = f(py, p x p y \frac{px}{py} pypx),即可以求

求px和py幂的最大公约数次幂pgcd(x,y)

应用:辗转相减法可以用来求若干个形如( p q \frac{p}{q} qp)ri的数的最大公约数。

举例(指数的最大公约数):gcd_sub(52,53) = 51

算法推导过程:f(px,py) = p(x,y) = p(y,x−y) = f(py,p(x−y)) = f(py, p x p y \frac{px}{py} pypx)

  • p q \frac{p}{q} qp不可以再表示为次幂的形式。
  • p、q、ri均为正整数。

代码:时间复杂度O(n)

class Solution {

    /**
     * 辗转相减法(指数的最大公约数)
     * @return
     */
    public static int gcd_sub(int a, int b) {
        if (b == 1) return a;
        if (a < b) {
            int temp = a;
            a = b;
            b = temp;
        }
        return gcd_sub(b, a / b);
    }

    public static void main(String[] args) {
        System.out.println(gcd_sub(25, 125));
    }
}

image-20230126142755459


参考文章

[1]. 辗转相减法

[2]. 【最大公约数 GCD】 — 常用四大算法(辗转相除法,穷举法,更相减损法,Stein算法)

[3]. 数论-辗转相减法-第七届蓝桥杯省赛C++A/B组-最大比例

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

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

相关文章

使用CNN进行2D路径规划

卷积神经网络(CNN)是解决图像分类、分割、目标检测等任务的流行模型。本文将CNN应用于解决简单的二维路径规划问题。主要使用Python, PyTorch, NumPy和OpenCV。 任务 简单地说&#xff0c;给定一个网格图&#xff0c;二维路径规划就是寻找从给定起点到所需目标位置&#xff0…

如何取消PDF文件的保护设置?

PDF文件可以设置两种保护模式&#xff0c;一种是打开文件保护&#xff0c;也就是设置打开密码&#xff0c;只有输入密码才能打开文件&#xff1b;另一种是限制保护&#xff0c;即限制密码&#xff0c;可以根据需要设置PDF文件是否可以进行编辑、复制、打印等操作。 如果不需要…

第二篇:Haploview做单倍型教程2--分析教程

大家好&#xff0c;我是邓飞&#xff0c;这里介绍一下如何使用Haploview进行单倍型的分析。 计划分为三篇文章&#xff1a; 第一篇&#xff1a;Haploview做单倍型教程1–软件安装第二篇&#xff1a;Haploview做单倍型教程2–分析教程第三篇&#xff1a;Haploview做单倍型教程…

kaggle竞赛 | 计算机视觉 | Doodle Recognition Challenge

目录赛题链接赛题背景数据集探索合并多个类别CSV数据集数据建模 (pytorch)赛题链接 https://www.kaggle.com/competitions/quickdraw-doodle-recognition/overview/evaluation 数据集从上述链接中找 赛题背景 Quick&#xff0c;Draw&#xff01;作为实验性游戏发布&#xff…

python元组

python元组 文章目录python元组一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.创建元组2.访问元组3.修改元组4.删除元组5.索引及截取6.元组运算符7.内置函数总结一、实验目的 掌握元组的用法 二、实验原理 Python 的元组与列表类似&#xff0c;不同之处在…

2. MySQL之mysql-connector-python的安装使用

MySQL 是最流行的关系型数据库管理系统&#xff0c;关于数据库以及MySQL相关知识&#xff0c;此处不再赘述。本篇介绍使用 mysql-connector-python 来连接使用 MySQL。 1. 安装mysql-connector-python 执行以下代码&#xff0c;没有报错&#xff0c;证明安装成功。 import my…

旗舰版:Stimulsoft Ultimate 2023.1.5 Crack

Stimulsoft Ultimate 是一套用于创建报告和仪表板的通用工具。该产品包括一整套适用于 WinForms、ASP.NET、.NET Core、JavaScript、WPF、PHP、Java 和其他环境的工具。 无需比较产品功能。Stimulsoft Ultimate 包括一切&#xff01; 报表设计器的一切 我们提供易于使用且功能齐…

Android深入系统完全讲解(41)

我们要学习的是整体逻辑&#xff0c;我们 C 找 Java 的依据是类和对象&#xff0c;参数中 JNIEnv *env, jobject obj 。 env 代表当前环境上下文&#xff0c;这个当我们多个线程调用的时候&#xff0c;需要 AttachCurrentThread 进行设定&#xff0c;让 env 关联到当前线程&…

Linux常见命令 24 - RPM命名管理-包命名与依赖性

目录 1. RPM包命名规则 2. RPM包依赖性 1. RPM包命名规则 如包全名&#xff1a;httpd-2.2.15-15.e16.centos.1.i686.rpm httpd&#xff1a;软件包名2.2.15&#xff1a;软件版本15&#xff1a;软件发布的次数el6.centos&#xff1a;适合的Linux平台&#xff1a;CentOS 6.xi6…

springboot和nacos整合mybatis-plus实现多数据源管理

文章目录1.依赖2.配置文件3.redis测试3.1redis配置文件3.2controller3.3测试4.mysql测试4.1数据库表和结构4.2实体类和枚举4.3DogMapper.xml4.4DogMapper4.5service和serviceImpl4.6controller4.7测试写了一个小demo&#xff0c;通过mybatis-plus实现多数据源管理使用了mysql和…

【笔记】A simple yet effective baseline for 3d human pose estimation

【论文】https://arxiv.org/abs/1705.03098v2 【pytorch】(本文代码参考)weigq/3d_pose_baseline_pytorch: A simple baseline for 3d human pose estimation in PyTorch. (github.com) 【tensorflow】https://github.com/una-dinosauria/3d-pose-baseline 基本上算作是2d人体…

Python压缩JS文件,PythonWeb程序员必看系列,重点是 slimit

Python 压缩文件系列文章&#xff0c;我们已经完成了 2 篇&#xff0c;具体如下&#xff1a; Python Flask 实现 HTML 文件压缩&#xff0c;9 级压缩 Python 压缩 css 文件&#xff0c;第三方模块推荐 压缩JS学习目录&#x1f6a9; jsmin 库&#x1f3a8; 库的安装&#x1f3a8…

HackTheBox Stocker API滥用,CVE-2020-24815获取用户shell,目录遍历提权

靶机地址&#xff1a; https://app.hackthebox.com/machines/Stocker枚举 使用nmap枚举靶机 nmap -sC -sV 10.10.11.196机子开放了22&#xff0c;80端口&#xff0c;我们本地解析一下这个域名 echo "10.10.11.196 stocker.htb" >> /etc/hosts 去浏览器访问…

操作系统真相还原_第5章第4节:特权级

文章目录特权级TSS简介CPL和DPL入门处理器提供的从低特权级到高特权级的方法门、调用门和RPL序特权级 保护模式下特权级按照权力大小分为0、1、2、3级 0特权级是操作系统内核所在的的特权级 TSS简介 TSS&#xff0c;即Task State Segment&#xff0c;意为任务状态段&#x…

Modbus协议完整版

第一部分&#xff1a;Modbus协议1 引言1.1 范围MODBUS是OSI模型第7层上的应用层报文传输协议&#xff0c;它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。自从1979年出现工业串行链路的事实标准以来&#xff0c;MODBUS使成千上万的自动化设备能够通信。目前&am…

【图卷积网络】03-空域卷积介绍

注&#xff1a;本文为3.1-3.2 空域卷积视频笔记&#xff0c;仅供个人学习使用 1、谱域图卷积 1.1 回顾 上篇博客【图卷积神经网络】02-谱域图卷积介绍讲到了三个经典的谱域图卷积&#xff1a; SCNN用可学习的对角矩阵来代替谱域的卷积核。 ChebNet采用Chebyshev多项式代替谱…

TIA博途中计算多个数据的算术平均值的具体方法示例

TIA博途中计算多个数据的算术平均值的具体方法示例 我们这里采用官方提供的Floating Average功能块来实现多个数据的算术平均值的计算。 此功能块计算最新输入的100个数值的均值(浮动平均值)。采集的数据队列达到100个之后,队列每入栈一个新数值,将去掉一个队列里最早进来的…

高通平台开发系列讲解(GPS篇)gpsONE 系统架构

文章目录 一、系统架构图二、gpsONE系统组成三、gpsONE交互流程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢高通的定位系统模块,名称叫gpsONE。 一、系统架构图 二、gpsONE系统组成 GPS系统架构可以分为六个部分: APP层Framework Client端(LocationManager API…

网站被挂马植入webshell导致网站瘫痪案例

一、问题现象 下午两点&#xff0c;刚刚睡醒&#xff0c;就接到了客户打来的电话&#xff0c;说他们的网站挂&#xff08;这个用词很不准确&#xff0c;但是感觉到问题的严重性&#xff09;了&#xff0c;询问是怎么发生的&#xff0c;之前做了什么操作&#xff0c;客户的回答…

Bash 脚本实例:获取符号链接的目标位置

我们都熟悉 Linux 中的符号链接&#xff0c;通常称为符号链接或软链接&#xff0c;符号链接是指向任何文件系统中的另一个文件或目录的特定文件。本文将介绍 Linux 中符号链接的基础知识&#xff0c;并创建一个简单的 bash 脚本来获取符号链接的目标位置。符号链接的类型主要有…