hdu-Lowest Common Multiple Plus(瑕疵版)
来源:互联网 发布:手机淘宝分销管理 编辑:程序博客网 时间:2024/04/29 08:19
hdu-Lowest Common Multiple Plus求多个数的的最小公倍数(瑕疵版)
Problem Description
求n个数的最小公倍数。
Input
输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。
Output
为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。
Sample Input
2 4 63 2 5 7
Sample Output
1270
解题思路:
n个数的最小公倍数可以用质因子分解法;
例如:求10 12 4的最小公倍数(用质因数表示)
10 = 2 * 5 ..........(1)
12 = 2 * 2 *3........(2)
4 = 2 * 2...........(3)
在(1)式中有一个2,一个5;在(2)式中有两个2,一个3;在(3)式中有两个2;
所以2最多有两个,3最多有一个,5最多有一个;最后ans = ( 2 ^ 2 ) * ( 3 ^ 1 ) * ( 5 ^ 1 ) = 60
看完解题思路,就请移步到这篇博文:http://blog.csdn.net/yin_zongming/article/details/22658057
#include<cstdio>#include<cmath>#include<cstring>#include<iostream>#include<algorithm>#define maxn 10000using namespace std;int p[maxn];//存放素数int prime()//求出小于maxn的所有素数{ int i,j,k=0; for(i=2;i<=maxn;i++) { int flag=0; for(j=2;j<i;j++) { if(i%j==0) { flag=1; break; } } if(flag==0) p[k++]=i; } return k;}int main(){ int count; count=prime();//小于maxn的素数共有count个 int s[maxn],num[maxn];//num[]用来记录该素数出现的最多次数 int n,i,j,k,max,temp; __int64 sum; while(~scanf("%d",&n)) { memset(num,0,sizeof(num)); for(i=0;i<n;i++) { scanf("%d",&s[i]); for(j=0;j<count;j++) { max=0; if(s[i]%p[j]==0)//看这个数是否能够分解为该质因数 { temp=s[i]; while(1) { if(temp%p[j]!=0)break; else { max++;//记录该质因数在这个数中出现的次数 temp/=p[j]; } } if(max>num[j]) num[j]=max; } }//这里存在一个问题就是如果对于数据量比较的大的数,我可能素数表不够用,所以我就应该加以补充。但是这里我忘记补充了,抱歉。 }//在这篇里面我有补充http://blog.csdn.net/yin_zongming/article/details/22658057 sum=1; for(i=0;i<count;i++) if(num[i]) for(j=0;j<num[i];j++)//对所有出现次数不为0的质因数求他们的幂的积 sum*=p[i]; printf("%I64d\n",sum); } return 0;}
后来我用了另外一种方法:但是对于数据量比较大的可能会超时,注意!!
两两之间求出最小公倍数,最后得出结果。这样代码比较简短,而且便于理解。
#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<string>#include<stack>#include<queue>#include<vector>#include<algorithm>#include<iostream>using namespace std;#ifdef __int64typedef __int64 LL;#elsetypedef long long LL;#endif#define maxn 10000int num[maxn];int gcd(int a,int b){ if(b==0) return a; return gcd(b,a%b);}int lcm(int a,int b){ return a/gcd(a,b)*b;}int lcmN(int s[],int len){ int ans; if(len==1) return s[0]; ans=lcm(s[0],s[1]); for(int i=2;i<len;i++)//求出两个数之间的LCM ans=lcm(ans,s[i]); return ans;}int main(){ int t,n; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&num[i]); printf("%d\n",lcmN(num,n)); } return 0;}
- hdu-Lowest Common Multiple Plus(瑕疵版)
- HDU - Lowest Common Multiple Plus
- hdu-Lowest Common Multiple Plus
- HDU 2028 Lowest Common Multiple Plus
- hdu - 2028 - Lowest Common Multiple Plus
- hdu 2028 Lowest Common Multiple Plus
- HDU 2028 - Lowest Common Multiple Plus (最小公倍数)
- [hdu 2028] Lowest Common Multiple Plus
- HDU 2028 Lowest Common Multiple Plus
- HDU 2028 Lowest Common Multiple Plus
- hdu 2028 Lowest Common Multiple Plus
- HDU 2028 Lowest Common Multiple Plus
- hdu 2028 Lowest Common Multiple Plus
- HDU - 2028 Lowest Common Multiple Plus
- hdu 2028 Lowest Common Multiple Plus
- HDU 2028 Lowest Common Multiple Plus
- hdu 2028 Lowest Common Multiple Plus
- HDU 2028 Lowest Common Multiple Plus
- uImage和zImage
- hdu 3516 四边形优化dp
- iOS: UIScrollView的属性decelerating
- HHVM(HipHop PHP)优化加速PHP代码:搭建提速五六倍的PHP服务器
- [leetcode刷题系列]Triangle
- hdu-Lowest Common Multiple Plus(瑕疵版)
- HHVM安装
- iOS: UIScrollView的属性decelerationRate
- .cls vs. .sty
- iOS: UIScrollView的属性delaysContentTouches
- 在eclipse下编译hadoop2.0源码
- iOS应用开发视频教程笔记(十二)Persistence
- 简单用C#编写socket作为客户端与Linux下C++编写服务器端通信(未完善)
- Hadoop学习系列--持续更新中