文章目录

  • C++020-C++因数,公因数,公倍数
    • 因数,公因数,公倍数
      • 因数
        • 求解因数的枚举方法
        • 题目描述
      • 最大公约数
        • 求解最大公约数的方法:
          • 枚举法
          • 辗转相除法
      • 最小公倍数
        • 求解最小公倍数的方法
          • 枚举法
          • 用最大公约数找最小公倍数
      • 题目描述-已知最大公约数和最小公倍数,求原数
      • 作业
    • 在线练习:
    • 总结

C++020-C++因数,公因数,公倍数

在线练习:
http://noi.openjudge.cn/
https://www.luogu.com.cn/

因数,公因数,公倍数

在数学思维中,了解因数、公约数和公倍数的计算方法是十分必要的,本文的目标在于:

1、了解因数、公约数和公倍数的基本概念
2、掌握求解因数的基本步骤
3、掌握最大公约数和最小公倍数的求法

因数

因数,或称为约数,定义:整数a/整数b==整数c (b=0)而没有余数,我们就说b是a的因数。
注意:如果a/b==c且没有余数,那么能不能满足a/c==b且没有余数呢?所以如果b是a的因数,那么c也是a的因数。即因数大部分是成对出现的。

求解因数的枚举方法

#include<iostream>
#include<stdio.h>
#include <time.h>
using namespace std;int main()
{int n;cin>>n;for(int i=1;i<=n;i++){if(n%i==0){cout<<i<<" ";}}return 0;
}

题目描述

【描述】任给一个正整数n,求这个数字的不同的因数及其个数。如n=6时,输出1,2,3,6四个因数,并且换行输出总数是4。
【输入】一个整数n;
【输出】两行;第一行从小到大列出因数,空格分隔;第二行是因数的数量。
【样例输入】
6
【样例输出】
1 2 3 6
4

#include<iostream>
using namespace std;int main()
{int n,s=0;cin>>n;for(int i=1;i<=n;i++){if(n%i==0){cout<<i<<" ";s++;}}cout<<endl<<s;return 0;
}

最大公约数

最大公约数,也称最大公因数、最大公因子,指两个或多个整数共有约数中最大的一个。

4的因数有: 1、2、4
8的因数有: 1、2、4、8
则4和8的最大公约数为4。

求解最大公约数的方法:

枚举法

可以使用枚举的方法:从最大的因数开始去除,看两个数字是否都能整除,如果找到第一个那么这个数字就是最大公约数。

#include<iostream>
using namespace std;int main()
{int a,b;cin>>a>>b;for(int i=min(a,b);i>=1;i--){if(a%i==0 && b%i==0){cout<<i;break;}}return 0;
}

辗转相除法

辗转相除法是求最大公约数的一种方法。它的具体做法是:

用较大数m除较小数n,得到的余数r作为下次运算中的较小数m,原来的n作为下次运算中的较大数。
如此反复,直到最后余数是O为止,最后的除数就是这两个数的最大公约数。

例如:

对于整数m=12和整数n=8。
12 %8得到余数r=4,将n的值给m,将r的值给n
8 %4得到余数r=0;
r为0,运算结束,则除数n=4就是最大公约数

#include<iostream>
using namespace std;int main()
{int a,b,t;cin>>a>>b;if(a<b) swap(a,b); // 确保a比b大
//    for(;a%b;)while(a%b){t=a%b;//保存余数a=b; // 把较小的b赋值给ab=t; //把余数赋值给b}cout<<b<<endl;return 0;
}

最小公倍数

两个或多个整数公有的倍数叫做它们的公倍数,其中除O以外最小的一个公倍数就叫做这几个整数的最小公倍数。

对于整数4和整数8。
4的倍数有:4、8、12…
8的倍数有:8、16、32
则4和8的最小公倍数为8。

求解最小公倍数的方法

枚举法

利用枚举的思想,把任意一个数的倍数从小到大求余另外一个数字,如果能整除,就是最小公倍数。

#include<iostream>
using namespace std;int main()
{int a,b,i=1;cin>>a>>b;while(1){if(a*i % b==0){cout<<i*a;break;}i++;}return 0;
}

用最大公约数找最小公倍数

由于两个数的乘积等于这两个数的最大公约数(x)与最小公倍数(y)的积,可以利用最大公约数求两个数字m和n 的最小公倍数m*n==x*y
步骤:

求两个数字的最大公约数,设为x
m/x*n得到m和n的最大公约数

#include<iostream>
using namespace std;int gcd(int x,int y)
{if(x<y) swap(x,y);while(x%y){int t=x%y;x=y;y=t;}return y;
}int main()
{int a,b,g;cin>>a>>b;int t = gcd(a,b);a = a/t;b = b/t;g = a*b *t;cout<<g;return 0;
}

题目描述-已知最大公约数和最小公倍数,求原数

【描述】已知两个数a和b的最大公约数是G,最小公倍数是L,问这两个数可能是多少?列出所有的解。注意,a=3,b=4和a=4,b=3算不同的解。
【输入】两个整数G和L;均在int范围内;
【输出】若干行,一组解占一行;按照a从小到大列出所有解。
【样例输入】
14
280
【样例输出】
14 280
56 70
70 56
280 14
【分析】
两个数可以表示为

a=a1*a2*a3*...*an*G
b=b1*b2*b3*..*bn*G
L =a1*a2*....n*b1*b2*...*bn*G
其中G是a和b中因数的交集,即产生最大公约数的部分因数,那么a1...an与b1...bn没有公因数。
不妨设a=A*G,b=B*G,那么AB=L/G,且AB的最大公约数为1;
我们枚举A和B的组合,就能从A和B计算得到a和b。
#include<iostream>
using namespace std;int gcd(int x,int y)
{if(x<y) swap(x,y);while(x%y){int t=x%y;x=y;y=t;}return y;
}int main()
{int a,b,G,L,A,B;cin>>G>>L;int t=L/G;for(A=1;A<=t;A++){if(t%A==0){B=t/A;if(gcd(A,B)==1){cout<<A*G<<" "<<B*G<<endl;}}}return 0;
}

作业

在线练习:

http://noi.openjudge.cn/

总结

本系列为C++学习系列,会介绍C++基础语法,基础算法与数据结构的相关内容。本文为C++中的因数、公因数、公倍数案例,包括相关案例练习。

C++020-C++因数,公因数,公倍数相关推荐

  1. 十二届 - CSU 1803 :2016(同余定理)

    题目地址:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1803 Knowledge Point: 同余定理:两个整数a.b,若它们除以整数m所 ...

  2. 7月30日题记(CF1554B/CF1554C/CF1206C/CF1200C/CF1200B/CF841B/CF1202A/CF1234C)

    哎呀,补题解工作量好大- 查了下发现csdn不支持排列文章顺序,只能从十多天开始补 otz 今天摸鱼没去实验室 结果寝室玩了一天的物语- 不过雷暴雨天没出门不亏 校门口都淹了XD 看任天堂独立游戏直面 ...

  3. c语言求最小公倍数_分解质因数、互质数、公因数、最大公因数、公倍数、最小公倍数...

    01 分解质因数 1. 定义: 把一个合数分解成多个质数相乘的形式. 2.求法: 用短除法分解质因数(一个合数写成几个质数相乘的形式). 如:30分解质因数是:(30=2×3×5) 02 互质数 1. ...

  4. c语言最大公约数和最小公倍数_五年级奥数课堂之七:公因数和公倍数

    乘积尾0的个数 公因数和公倍数的基本概念 公因数的释义 给定若干个整数,如果有一个(些)数是它们共同的因数,那么这个(些)数就叫做它们的公因数.而全部公因数中最大的那个,称为这些整数的最大公因数. 公 ...

  5. 公约数(也叫公因数)|公倍数 |小知识|Golang

    一.最大公约数(也叫公因数) 两个数的 最大公约数 是能够被两个数整除的最大正整数. 举例: 3 和 6 的最大公约数是3."6和3的最大公因数是3. 6的因数有1,2,3,6,3的因数有1 ...

  6. 初等数论--整除--公因数一定是最大公因数的因数

    初等数论--整除--公因数一定是最大公因数的因数 最大公因数 互素 公因数一定是最大公因数的因数:d∣a且d∣b↔d∣(a,b)d|a且d|b\leftrightarrow d|(a,b)d∣a且d∣ ...

  7. 用多种方法求最大公倍数和最小公因数的java代码

    用三种方法求两个数的最大公因数和最小公倍数,求三个数的最大公因数和最小公倍数 该程序的代码为: package A; import java.util.Arrays; import java.util ...

  8. 两个数相乘积一定比每个因数都大_人教版五年级数学:因数、倍数与分数的整理与复习...

    写在前面的话:因数与倍数和分数基本性质之间存在紧密的联系,可以将之放在一起学习,对分数基本性质的学习有促进作用,分数的基本性质对分数的加法和减法也非常重要,因此可以放在一起学习.复习. [整理与复习] ...

  9. 两个数相乘积一定比每个因数都大_小升初数学知识点大全含公式+20类必考应用题(含答案解析),孩子考试一定用得上!...

    小升初数学知识点大全含公式 一.几何图形周长.面积和体积公式* 三角形的面积=底×高÷2.S= a×h÷2 正方形的面积=边长×边长 S= a² 长方形的面积=长×宽 公式 S= a×b 平行四边形的 ...

最新文章

  1. 可视化反投射:坍塌尺寸的概率恢复:ICCV9论文解读
  2. 串口的偶校验位设置_详解UART串口
  3. apache源码安装
  4. Java中读取某个目录下的所有文件和文件夹
  5. 【开源推荐】AllJoyn:打造全球物联网的通用开源框架
  6. 泛华金控携手神策数据,赋能保险经代公司筑就全闭环智能营销
  7. 【学习笔记】Redis的geohash数据结构介绍
  8. 【第六期】拿不到offer全额退款 !人工智能工程师培养计划招生
  9. hdu 2824 The Euler function
  10. 使用 Visual Studio 2019 批量添加代码文件头
  11. 《ASP.NET Core 微服务实战》-- 读书笔记(第9章)
  12. 记一次阿里面试题:都有哪些进程间通信方式?麻烦你不要再背了
  13. (22)HTML Emoji
  14. python保存模型 drop_(长期更新)【python数据建模实战】零零散散问题及解决方案梳理...
  15. [JavaEE] Hibernate连接池配置测试
  16. vagrant 学习
  17. Excel 实用小技巧:如何将两列的数据合并到一起
  18. python绘制正态分布曲线_利用python绘制正态分布曲线
  19. 华为android打开usb调试模式,华为 PE-CL00 开启USB调试模式
  20. NBA最伟大的50位球星

热门文章

  1. CANalyzer及CANOE使用二:基于UDS的Panel界面及使用Capl编写BootLoader自动化刷写流程(多文件or多段下载)
  2. RAID配置教程详解(6) -RAID-1磁盘镜像卷
  3. 用我一辈子去忘记(昆明-大理-丽江-香格里
  4. Photoshop 22.3 mac版已原生支持Mac M1芯片 速度比intel快50%
  5. GNU Binutils
  6. 打开word2010出现进度条的解决办法
  7. WAV音频数组提取器【单片机音频处理】
  8. HTML圈c怎么打出来,一种方便固定手表的展示C圈的制作方法
  9. vue+科大讯飞 实现语音听写功能
  10. mac下ElasticSearch 集群搭建,使用Kibana配置和管理集群