辗转相除法 冒泡排序
Problem G: 辗转相除法
Time Limit: 1 Sec Memory Limit: 2 MB
Description
辗转相除法,也称欧几里得算法,是求最大公约数的算法。辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。
两个整数的最大公约数(亦称公约数)是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。例如,252和105的最大公约数是21(252 = 21 × 12;105 = 21 × 5);因为252 − 105 = 147,所以147和105的最大公约数也是21。在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至其中一个变成零。这时,所剩下的还没有变成零的数就是两数的最大公约数。
例如,计算a = 1071和b = 462的最大公约数的过程如下:从1071中不断减去462直到小于462(可以减2次,即商q0 = 2),余数是147:
1071 = 2 × 462 + 147.
然后从462中不断减去147直到小于147(可以减3次,即q1 = 3),余数是21:
462 = 3 × 147 + 21.
再从147中不断减去21直到小于21(可以减7次,即q2 = 7),没有余数:
147 = 7 × 21 + 0.
此时,余数是0,所以1071和462的最大公约数是21。
Input
输入为多行,每行有一对非负整数a,b,且a*b不会超出int类型的数据范围。输入至EOF结束。
Output
每行输出一对a,b的最大公约数和最小公倍数,顺序与输入对应。
从整除定义出发:若a整除b(b除以a没有余数),则b是a的倍数,a是b的约数,这里要求b不为0。因此0是任意整数的倍数(任意整数都是0的约数),但是0不能是约数。
Sample Input
1 1
2 3
2 2
3 2
4 6
7 5
12 6
18 9
24 36
Sample Output
1 1
1 6
2 2
1 6
2 12
1 35
6 12
9 18
12 72
HINT
按照题目描述所给的算法解题,注意以下几点:辗转相除法对两个数的大小关系有要求,根据倍数和约数的数学定义,一个非0数和0的约数是多少?辗转相除法的计算过程是符合这种定义的。
#include<stdio.h>
int main()
{int a,b,c,i,j,k,temp;while(scanf("%d %d", &a, &b)!=EOF){if(a<b)//a,b按大小排序{temp=a;a=b;b=temp;}c=a*b;//a*b=最大公约数*最小公倍数while(b!=0)//辗转相除法 a/b=c....d a=b b=d(b!=0){temp=a%b;a=b;b=temp;}printf("%d %d\n",a,c/a);}return 0;
}
#include<stdio.h>
int main()
{int i,j,k,m,n,temp;int a[1010];scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&a[i]);}for(i=0;i<n;i++){for(j=0;j<n-i-1;j++)//每次将最大数放在最后if(a[j]>a[j+1])//而且由于j+1 因此最后i+1个不用遍历{ temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}}for(i=0;i<n;i++){if(i==0) printf("%d",a[i]);else printf(" %d",a[i]);}return 0;
}
辗转相除法 冒泡排序相关推荐
- 洛谷:三角函数,C语言
题目描述 输入一组勾股数 a,b,c(abc),用分数格式输出其较小锐角的正弦值.(要求约分.) 输入格式 一行,包含三个正整数,即勾股数 a,b,c(无大小顺序). 输出格式 一行,包含一 ...
- python冒泡排序与常用数学计算
一 .冒泡排序: 冒泡排序: 属于交换排序; 两两比较大小,交换位置,如同水泡大的往上(右)跑; n个数从左至右编号从0到n-1,索引0和1比较,如果索引0大,则交换两者位置; 如果索引1大则不用交换 ...
- PHP算法题:如何实现冒泡排序
算法原理: 1.比较相邻的元素,如果第一个比第二个大,那么就交换这两个元素. 2.对每一对相邻元素做同样的工作,从第一对开始到最后一对结束,最后的元素应该会是最大的数. 3.除了最后一个元素外,针对其 ...
- C#基础——数组(冒泡排序)
数组 所谓数组,就是相同数据类型的元素按一定的顺序的集合,就是把有限个类型相同的变量用一个名字来命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标.组成数组的各个变量称为数组的分量 ...
- python实现冒泡排序完整算法_Python实现冒泡排序算法的完整实例
冒泡排序:顾名思义就是(较小的值)像泡泡一样往上冒,(大的值)往下沉. 实现原理:依次将相邻两个数值进行比较,较小的数值移到左边,较大的数值移到右边,依次比较完第一轮后,最大的数值应该排在最右边.然后 ...
- 为什么双层循环 冒泡排序_冒泡排序的双重循环理解
主要说一下冒泡排序的一些关键地方的个人理解,比如算法思想,两个循环的作用意义,中间循环变量范围的确定等. 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面 ...
- 排序 时间倒序_经典排序算法之冒泡排序(Bubble Sort)
冒泡排序 ( Bubble Sort ) 冒泡排序,正如它的名字一样,未排序数组中的最大(小)值会依次往上浮.冒泡排序主要有两个基本步骤:相邻元素之间的比较 和 交换位置. 步骤分析: 令待排序序列为 ...
- Equalizing Two Strings 冒泡排序or树状数组
首先考虑排序后相等 如果排序后相等的话就只考虑reverse长度为2的,所以a或者b排序后存在相邻两个字母相等的话就puts YES,n>26也直接puts YES 不然的话就假设c为a,b排完 ...
- java冒泡排序_Java中的经典算法之冒泡排序(Bubble Sort)
原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将 ...
最新文章
- Journey源码分析三:模板编译
- 【转】Linux命令工具 top详解
- Oracle 定时器
- java contions_Java基础---数组总结
- python3读取csv和xlsx文件
- SDNU 1300.转圈游戏(快速幂)
- 第2章 数据认知与预处理
- 与毒”共舞30年!清华美女研究生为何放弃高薪,选择特招入伍?背后的原因令人泪崩......
- Zetcode GUI 教程
- java的jtextarea_java中怎么在JTextArea中添加图片?
- sql语言的一大类 DML 数据的操纵语言
- mySQL和oracle的数据类型区别
- Mybatis开启日志
- 使用Roberts算子进行图像分割(Matlab自编程实现)
- ADB常用命令--测试人员必备
- newifi mini php,WBB - Newifi mini刷小米路由mini固件 + 屏蔽广告Adbyby插件小记
- UVA1153 顾客是上帝 Keep the Customer Satisfied(贪心)
- 北京职工修改医保定点医院
- 数字认证机构(CA)业务流程
- 巴别时代php面试题,巴别时代遇到的函数