C语言求解最大公约数(欧几里得算法的应用)

        今天我们来看看两个数的最大公约数怎么求,话不多说之间开干!

        代码1(呆呆的暴力求解)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{int x, y;printf("请输入两个正整数:>");scanf("%d %d", &x, &y);int min = 0;if (x < y){for (min = x;min > 0;min--){if (x % max == 0 && y % max == 0){printf("两数最大公约数为:%d ", min);break;}}}if (y < x){for (min = y;min > 0;min--){if (x % min == 0 && y % min == 0){printf("两数最大公约数为:%d ", min);break;}}}return 0;
}

        我们在分析数学模型的时候发现,我们如果想要使用计算机实现求两数的最大公约数的时候,我们需要先找两数中较小的那个,然后使用x和y去试除,直到出现一个数可以同时除x和y,那么这个数就是这两个数的最大公约数。我们这个代码从x>y和x<y两个方面进行分别运算,但是我们发现,这样的代码冗余的地方很多,我们会想,如果我们可以不用判断两次x大于y和x小于y就好了,我们对代码进行优化。

        代码2(使用三目运算符解决冗余问题)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>//优化,三目运算符求解
//我们发现上面的步骤有些有点多余,比如我们将x与y的大小比较了两次而且每次都是使用暴力求解的方法进行解题。
int main()
{int x, y;//输入printf("请输入两个整数:>");scanf("%d %d", &x, &y);//得出x与y中小的那个int min = (x < y) ? x : y;int m = min;//从最大数开始式除,直到最大公约数while (1){if (x % m == 0 && y % m == 0){break;}m--;}printf("最大公约数为:>%d ", m);return 0;
}

        这个代码我们使用三目运算符对代码进行优化,我们比较x和y的大小时将小的那个数放在min中,在三目运算符中,我们首先看看x是否小于y,如何是,我们将x给min,如果不是,我们将y给min。这样我们发现,步骤比之前要简化很多,但是这里我们其实还是在暴力求解的,我们还是从min开始一直试除直到我们可以将x和y都除尽的时候才输出,我们发现还可以优化。

        代码3:使用欧几里得算法求解

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//欧几里得算法求解
int main()
{int x = 0, y = 0;int z;//输入printf("请输入两个整数:>");scanf("%d %d", &x, &y);while (z=x % y){x = y;y = z;}printf("最大公约数为:>%d\n ", y);return 0;

        这里我们通过查找资料发现辗转相除是一个求解两数最大公约数的好方法,在计算过程中,我们用x模y,得到余数z,如果这里我们z为0,我们退出循环直接输出y,y为最小值,如果z不为0,我们将y给x,z给y,之后重复x模y,直到z=0,这个时候,y就是我们的最大公约数。

        有些同学可能疑惑为什么这里最小值就是y了,如果我们输入12 24的话,这里y不就是24了嘛,为什么我们不输出24呢,这里我们就要注意,当我们x%y的时候,如果x比y小,我们是12%24,这里我们是商0余24,之后我们会进入while循环将x与y交换位置,之后会变为24 12,这个时候我们y中肯定就是最小值了,所以这里最后只需要输出y就好啦。

        希望大家每天都可以学到新的知识呢,每天加油一点点,以后会看见不一样的自己呢!共勉!

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

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

相关文章

Python是解释型语言,为啥还有 __pycache__ 文件呢?为啥还有.pyc 文件呢?

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 …

【算法集训】基础算法:双指针

344. 反转字符串 // 双指针思路 void reverseString(char* s, int sSize) {int i 0,j sSize - 1;while(i < j) {char tmp s[i];s[i] s[j];s[j] tmp;i , j --;} }392. 判断子序列 // 双指针 bool isSubsequence(char* s, char* t) {// 定义s和t的下标指针int i 0, j …

使用Java流API构建树形结构数据

简介&#xff1a; 在实际开发中&#xff0c;构建树状层次结构是常见需求&#xff0c;如组织架构、目录结构或菜单系统。本教案通过解析给定的Java代码&#xff0c;展示如何使用Java 8 Stream API将扁平化的菜单数据转换为具有层级关系的树形结构。 1. 核心类定义 - Menu Data…

【图论】【拓扑排序】1857. 有向图中最大颜色值

本文涉及的知识点 图论 拓扑排序 LeetCode1857. 有向图中最大颜色值 给你一个 有向图 &#xff0c;它含有 n 个节点和 m 条边。节点编号从 0 到 n - 1 。 给你一个字符串 colors &#xff0c;其中 colors[i] 是小写英文字母&#xff0c;表示图中第 i 个节点的 颜色 &#xf…

MySQL进阶-----SQL提示与覆盖索引

目录 前言 一、SQL提示 1.数据准备 2. SQL的自我选择 3.SQL提示 二、覆盖索引 前言 MySQL进阶篇的索引部分基本上要结束了&#xff0c;这里就剩下SQL提示、覆盖索引、前缀索引以及单例联合索引的内容。那本期的话我们就先讲解SQL提示和覆盖索引先&#xff0c;剩下的内容就…

ES6+对象常用方法

1.往Object里面添加元素 const obj {timeArr: [],fileIds: [],isVerifyOrder: res?.isVerifyOrder ? "true" : "false",isCompose: res?.isCompose ? "true" : "false",};Object.assign(res, obj);//往res添加属性const obj Ob…

HDU1020--编码问题

试题描述 问题详情如下图所示&#xff1a;要求&#xff1a;java实现、数据结构知识 参考代码 比较垃圾&#xff0c;在别人基础上改的&#xff0c;懒得重构&#xff0c;&#xff0c;&#xff0c;仅供参考 import java.util.Scanner;public class HDU1020StringEncoding {pu…

虚拟机安装银河麒麟

背景 由于Centos将于2024-06-30结束维护【脱保】&#xff0c;届时会存在Bug无人修复及功能无人开发等问题&#xff0c;所以要赶在这个节点前完成操作系统升级。可选的就是RedHat、Ubuntu以及国产信创【中标麒麟、银河麒麟、统信等】&#xff0c;或者使用云上操作系统【例如租阿…

40V耐压5A同步整流DCDC降压恒压芯片 高效率 外围小

同步整流恒压芯片是一种电源管理芯片&#xff0c;它能够在不同电压输入条件下保持输出电压恒定。这种芯片广泛应用于各种电子设备中&#xff0c;如通讯设备、液晶显示器、上网本、机顶盒等。 同步整流恒压芯片的工作原理是利用开关稳压器在输入电压和输出电压之间进行能量传递&…

GraphQL入门教程:构建更高效的APIs

GraphQL入门教程&#xff1a;构建更高效的APIs GraphQL是一个用于API的查询语言&#xff0c;由Facebook于2015年公开发布。它允许客户端精确地指定它们需要从API获取哪些数据&#xff0c;从而使数据交换更加高效和强大。与传统的REST API相比&#xff0c;GraphQL提供了更加灵活…

问答系统开发:基于深度学习的文本理解与生成

目录 1.前言 2.问答系统架构与流程 2.2.架构概述 2.3.流程描述 3.使用Transformer模型处理问答任务 3.1.BERT在问答任务中的应用 4.实现简单的交互式问答系统 5.总结 1.前言 本文旨在详细介绍问答系统的架构与流程&#xff0c;以及如何利用Transformer模型&#xff08;…

【笔记】通过码云Gitee获取OpenHarmony源码

Note&#xff1a;下面包含操作过程和问题解决&#xff08;首次安装Ubuntu&#xff0c;环境未完善&#xff09;&#xff0c;没有遇到问题可以直接跳过问题part了&#xff0c;小白也能完成配置下载。 前置准备&#xff08;Git环境账号&#xff09; &#xff08;一&#xff09;安…

做抖店没有产品货源?怎么玩?筛选货源的方法你需要了解清楚!

大家好&#xff0c;我是电商小布。 有很多的新手朋友们在玩抖店的时候&#xff0c;遇到的第一个问题就是自己手里没有产品在。 没有产品货源&#xff0c;也就没办法上架店铺&#xff0c;更别提交易工作了。 那么在这种情况下&#xff0c;该怎么来玩呢&#xff1f; 既然我们…

抖音降权限流后怎么办?可以考虑这样自查!

在抖音运营过程中&#xff0c;可能会遇到账号被降权限流的情况。面对这种情况&#xff0c;我们可以从以下几个方面进行自查&#xff0c;以找出问题所在并采取相应措施。 1 账号安全检查 包括敏感操作自查和违规操作检查。在敏感操作自查方面&#xff0c;需要回顾账号的历史操…

设计模式——行为型——责任链模式Chain Of Responsibility

请求类 public class ApproverRequest {private int type;//请求批准的类型private float price;//请求的金额private int id;//请求的编号 } 审批人抽象类 public abstract class ApproverPerson {protected ApproverPerson next;protected String name;//审批过程public a…

Debian/Ubuntu安装ping和netstat命令

sudo apt-get install net-tools#如果需要ping的话&#xff0c;安装如下软件 sudo apt-get install iputils-ping Debian/Ubuntu无netstat命令解决方案 Messay

python基础知识5——时间的处理和转换

python程序能用很多方式处理日期和时间&#xff0c;转换日期格式是一个常见的功能。 1、time模块 1.1、获取当前时间戳(unix时间戳)import time tick time.time() print(tick)1.2、# 获取时间元组import time t time.localtime() # 可传入unix时间戳进行转换 print(t)1.3、…

跨境运营必看:TikTok账号防封指南

多人在使用TikTok的过程中都会遇到一些问题&#xff0c;比如为什么TikTok没有浏览量&#xff1f;事实上&#xff0c;这很可能是因为你的账号已被禁止。但为什么它会被封呢&#xff1f;你怎样才能解决它&#xff1f; 一、TikTok账号为什么被封&#xff1f; 1、什么是 TikTok 影…

【隐私计算实训营008——SCQL】

1.SCQL使用/集成最佳实践 目前SCQL只开放API供用户使用/集成 使用SCDBClient上手体验可以基于SCQL API开发封装白屏产品&#xff0c;或集成到业务链路中 1.1 部署系统 环境配置&#xff1a; 机器配置&#xff1a;CPU/MEM最低8C16G机构之间的网络互通 镜像&#xff1a;secret…

记一个Unity的异常问题

今天同事给我反馈了一个Unity使用ThreadStatic的问题&#xff0c;问题如下&#xff1a; [ThreadStatic]private static Dictionary<int, Mesh> dic;IEnumerator Start(){dic new Dictionary<int, Mesh>();dic.Add(0, new Mesh());yield return Resources.UnloadUn…