hdu 1019Least Common Multiple(最小公倍数)
2016-07-12 19:42
225 查看
Least Common Multiple
Least Common Multiple
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 45272 Accepted Submission(s): 17023
Problem Description
The least common multiple (LCM) of a set of positive integers is the smallest positive integer which is divisible by all the numbers in the set. For example, the LCM of 5, 7 and 15 is 105.
Input
Input will consist of multiple problem instances. The first line of the input will contain a single integer indicating the number of problem instances. Each instance will consist of a single line of the form m n1 n2 n3 … nm where m is the number of integers in the set and n1 … nm are the integers. All integers will be positive and lie within the range of a 32-bit integer.
Output
For each problem instance, output a single line containing the corresponding LCM. All results will lie in the range of a 32-bit integer.
Sample Input
2
3 5 7 15
6 4 10296 936 1287 792 1
Sample Output
105
10296
Source
East Central North America 2003, Practice
Recommend
JGShining
此题求最小公倍数。
错误思路1:
找给的这串数中最大的数记为lcm。
再比较这个数和其它的数是否互质,不互质就乘上这个新的数作为lcm。
如果数据是无序的比如 9 3 10
10当然和9是互质的,所以就变成了90,然后90和3不互质、
如果有序比如 3 9 10
10和3互质,所以是30,然后30和9互质 结果就成30了,错误
错误思路 2:
先给这串数字排序,用sort+cmp从大到小+之前的思路一
但是还是WA了。
比如 20 15 9
20和15互质–>20*15=30,300和9不互质,答案300
但是正确答案是180, 300并不是9的倍数。
正确思路
于是乎,我发现最小公倍数数其实是都质因数分解后,每一个出现的质因数取出现最大值相乘。
然后我是借助最大公约数求最小公倍数
步骤:
一、利用辗除法或其它方法求得最大公约数;
二、 最小公倍数等于两数之积除以最大公约数。
以下过题代码
Least Common Multiple
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 45272 Accepted Submission(s): 17023
Problem Description
The least common multiple (LCM) of a set of positive integers is the smallest positive integer which is divisible by all the numbers in the set. For example, the LCM of 5, 7 and 15 is 105.
Input
Input will consist of multiple problem instances. The first line of the input will contain a single integer indicating the number of problem instances. Each instance will consist of a single line of the form m n1 n2 n3 … nm where m is the number of integers in the set and n1 … nm are the integers. All integers will be positive and lie within the range of a 32-bit integer.
Output
For each problem instance, output a single line containing the corresponding LCM. All results will lie in the range of a 32-bit integer.
Sample Input
2
3 5 7 15
6 4 10296 936 1287 792 1
Sample Output
105
10296
Source
East Central North America 2003, Practice
Recommend
JGShining
此题求最小公倍数。
错误思路1:
找给的这串数中最大的数记为lcm。
再比较这个数和其它的数是否互质,不互质就乘上这个新的数作为lcm。
for(i=0;i<m;i++) { scanf("%d",&a[i]); if(a[i]>lcm) lcm=a[i]; } for(i=0;i<m;i++) { /*if(gcd(lcm,a[i])!=1)lcm=lcm*a[i];//第一次提交的时候我写反了,写成如果互质就不乘*/ if(gcd(lcm,a[i])==1)lcm=lcm*a[i]; }
如果数据是无序的比如 9 3 10
10当然和9是互质的,所以就变成了90,然后90和3不互质、
如果有序比如 3 9 10
10和3互质,所以是30,然后30和9互质 结果就成30了,错误
错误思路 2:
先给这串数字排序,用sort+cmp从大到小+之前的思路一
但是还是WA了。
比如 20 15 9
20和15互质–>20*15=30,300和9不互质,答案300
但是正确答案是180, 300并不是9的倍数。
正确思路
于是乎,我发现最小公倍数数其实是都质因数分解后,每一个出现的质因数取出现最大值相乘。
然后我是借助最大公约数求最小公倍数
步骤:
一、利用辗除法或其它方法求得最大公约数;
二、 最小公倍数等于两数之积除以最大公约数。
以下过题代码
#include<stdio.h> #include<algorithm> int gcd(int a,int b) //gcd及greatest common divisor的首字母缩写 { return b==0?a:gcd(b,a%b); } //lcm及least common multiple的首字母缩写 { return a/gcd(a,b)*b; //此外这里要先除后乘,否则爆int } int a[1005]; int main() { int t; scanf("%d",&t); while(t--) { int i; int m,ma=0; scanf("%d",&m); for(i=0;i<m;i++) scanf("%d",&a[i]); ma=a[0]; for(i=1;i<m;i++) { ma=lcm(a[i],ma); } printf("%d\n",ma); } return 0; }
相关文章推荐
- JavaScript中获取表单信息并添加在表格中
- 小学生进位问题
- include标签布局以及自定义标题
- 第2章 一切都是对象
- android TextView、EditText对部分内容设置颜色、字体、超链接、图片
- HDU-1849-Rabbit and Grass【Nim博弈】
- 怎么做能尽量使得自己的孩子不成为熊孩子?
- C# DataTable构造自定义数据的一个使用问题
- Spring 小示例
- CCNU ACM 2016夏季集训·day2比赛
- 欢迎使用CSDN-markdown编辑器
- 【C++】 求两string日期间隔天数
- Mysql 5.7修改密码
- plsql 实现表的创建以及增删改查。
- 针对外部存储器(如磁盘)上存放的程序和数据,说法正确的是()。----阿里巴巴2015校招研发在线笔试题
- memcache append 大数据 大字符串 压缩
- 输入一个十进制数,转化为二进制
- nyoj 458 小光棍数
- 【皇甫】☀ 易买网_登录模块 上
- Java编程中操作XML文件(解析方法四:DOM4J)