高山 发表于 2022-8-21 11:18:04

C++求最大公因数(两个数字版)

本帖最后由 高山 于 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++自定义函数款(权限限制,先用腾讯微云,登录QQ账户即可)
https://share.weiyun.com/NlgrTJEg

额外减小 发表于 2022-8-22 16:56:56

高山 发表于 2022-8-22 09:23
能说说吗

#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;
}
以前随便做的冗长代码{:10_277:}

一点点儿 发表于 2022-8-21 19:38:54

支持楼主{:10_279:}

dolly_yos2 发表于 2022-8-21 20:29:20

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

额外减小 发表于 2022-8-21 23:25:20

我有一种非常复杂的方法

高山 发表于 2022-8-22 09:23:06

额外减小 发表于 2022-8-21 23:25
我有一种非常复杂的方法

能说说吗

陈尚涵 发表于 2022-8-22 16:03:14

本帖最后由 陈尚涵 于 2022-8-22 16:16 编辑


但是我请楼主先认识最大公因数和最大公倍数概念的定义
最大公因数:指两个数字共有的因数中最大的因数
最大公倍数:指两个数字都是他的因数且是符合条件中最大的,既无限,一般称之为最小公倍数
也就是说最大公因数≠最大公倍数
求最大公因数有很多方法,如辗转相减法,辗转相除法,还有穷举等
另外,最小公倍数=最大公因数×第一个数×第二个数

dolly_yos2 发表于 2022-8-22 21:12:28

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

又来捉虫了,「最小公倍数=最大公因数×第一个数×第二个数」不总是成立,仅当两个数互质时成立。您可能想描述的是「最小公倍数×最大公因数=第一个数×第二个数」

陈尚涵 发表于 2022-8-23 10:55:05

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

对不起哈乘除反了

zhangjinxuan 发表于 2022-8-30 17:01:00

一个错别字:前言那里,没有最大公倍数,应该是最大公约数
页: [1]
查看完整版本: C++求最大公因数(两个数字版)