鱼C论坛

 找回密码
 立即注册
查看: 2230|回复: 9

[技术交流] C++求最大公因数(两个数字版)

[复制链接]
发表于 2022-8-21 11:18:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 高山 于 2022-8-23 14:10 编辑

前言
本帖将会告诉你C++如何做求解最大公因数(也叫最大公倍数)。
回复奖励1鱼币,3次(定时提升)
代码说明
自定义函数版
#include <bits/stdc++.h>//头文件 
using namespace std;//命名空间 
int gcd(int a,int b)//自定义函数求解 
{
        if (a % b == 0)
        {
                return b;
        }
        else
        {
                return gcd(b,a % b);
        }
}
int main()
{
        int a,b;//定义 
        cin >> a >> b;//输入 
        cout << gcd (a,b);//输出 
        return 0;
}
C++自带函数版
#include<iostream>
#include<algorithm>

using namespace std;

int main()
{
        int n,m;
        cin >> n >> m;
        cout<< __gcd(n,m);

        return 0;
}
附件下载(不用下C++也能用)
C++自带函数款
C 最大公因数(自带函数).zip (431.88 KB, 下载次数: 2, 售价: 1 鱼币)
C++自定义函数款(权限限制,先用腾讯微云,登录QQ账户即可)
https://share.weiyun.com/NlgrTJEg

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-22 16:56:56 | 显示全部楼层

#include <stdio.h>

int main()
{
        int a,b,mid_result,min,n=2,s;
        printf("\n\
        求最大公约数与最小公倍数程序\n\n\
        请输入2个大于1的正整数(中间有空格):\n");
        scanf("%d %d",&a,&b);
        printf("若要求最大公约数,请输入0,若要求最小公倍数,请输入1.\n");
        scanf("%d",&s);
        mid_result=a*b;
        if(a>=b)
        {
                min=b;
        }
        else
        {
                min=a;
        }
        while(n<=min)
        {
                if((mid_result/n)%a||(mid_result/n)%b)
                {
                        n++;
                }
                else
                {
                        mid_result=mid_result/n;
                }
        }
        if(s==0)
        {
                printf(" %d 与 %d 的最大公约数为 %d !",a,b,a*b/mid_result);
        }
        else
        {
                printf(" %d 与 %d 的最小公倍数为 %d !",a,b,mid_result); 
        }
        
        return 0;
}
以前随便做的冗长代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
高山 + 1 + 1 鱼C有你更精彩^_^,置顶了!!!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-8-21 19:38:54 | 显示全部楼层

回帖奖励 +1 鱼币

支持楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-21 20:29:20 | 显示全部楼层

回帖奖励 +1 鱼币

反对楼主,希望楼主不要误人子弟。
从第一句“ C++如何做求解最大公因数(也叫最大公倍数)”就开始令人迷惑,试问楼主什么叫“最大公倍数”,又是怎么“也称最大公因数”的?
自定义函数和自带函数版具有相同的问题:不使用标准写法。头文件 bits/stdc++.h 和 __gcd 均没有在标准中被定义,在大多数情况下使用此类非标准内容都是强烈不推荐的——除非能够保证使用的功能将在应用的时间和空间范围之内保持稳定。
如果您想使用 C++ 内置的最大公因数计算函数,定义在头文件 <numeric> 中的 std::gcd 是一个不错(远比 __gcd 好得多)的选择。

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
高山 + 1 + 1 谢谢说明,我将会改正!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2022-8-21 23:25:20 | 显示全部楼层

回帖奖励 +1 鱼币

我有一种非常复杂的方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-22 09:23:06 | 显示全部楼层
额外减小 发表于 2022-8-21 23:25
我有一种非常复杂的方法

能说说吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-22 16:03:14 | 显示全部楼层
本帖最后由 陈尚涵 于 2022-8-22 16:16 编辑


但是我请楼主先认识最大公因数和最大公倍数概念的定义
最大公因数:指两个数字共有的因数中最大的因数
最大公倍数:指两个数字都是他的因数且是符合条件中最大的,既无限,一般称之为最小公倍数
也就是说最大公因数≠最大公倍数
求最大公因数有很多方法,如辗转相减法,辗转相除法,还有穷举等
另外,最小公倍数=最大公因数×第一个数×第二个数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-8-22 21:12:28 | 显示全部楼层
陈尚涵 发表于 2022-8-22 16:03
但是我请楼主先认识最大公因数和最大公倍数概念的定义
最大公因数:指两个数字共有的因数中最大的因数
...

又来捉虫了,「最小公倍数=最大公因数×第一个数×第二个数」不总是成立,仅当两个数互质时成立。您可能想描述的是「最小公倍数×最大公因数=第一个数×第二个数」
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-23 10:55:05 | 显示全部楼层
dolly_yos2 发表于 2022-8-22 21:12
又来捉虫了,「最小公倍数=最大公因数×第一个数×第二个数」不总是成立,仅当两个数互质时成立。您可能 ...

对不起哈乘除反了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-30 17:01:00 | 显示全部楼层
一个错别字:前言那里,没有最大公倍数,应该是最大公约数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 00:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表