杭电 HDU ACM 2028 Lowest Common Multiple Plus

Lowest Common Multiple PlusTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 39183Accepted Submission(s): 16144

Problem Description

求n个数的最小公倍数。

Input

输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。

Output

为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。

Sample Input

2 4 63 2 5 7

Sample Output

1270

Author

lcy

唉 这个题打心眼儿里没想到wa那么多次。

之前 程序错误属于运行 错误一开始用总的乘积 除以n个数的最大公约数。中间结果可能溢出。

再次程序错误属于逻辑错误,思路都错了。

最后判定 先求前两个数的最小公倍数。用这个最小公倍数和数组下一位再求最小公倍数,依次…………

不过!这是 第一种比较麻烦的方法。

第二种:找出n个数中 最大的数 M,然后次次检索n个数是否所有的都把它整除,否则 M++;在整个循环过程中

如果 所有的数不能同时把它整数,那么循环不会跳出,跳出时k即为所求。

F:

#include<iostream>#include<algorithm>using namespace std;int gcd(int k,int b){if(!b)return k;gcd(b,k%b);}int main(){int n;int *ls=new int [10000000];while(cin>>n){for(int i=0;i<n;i++){cin>>ls[i];}int G=ls[0],M=ls[0];for(int j=1;j<n;j++){G=gcd(ls[j],M);if(M<M*(ls[j]/G))M=M*(ls[j]/G);}cout<<M<<endl;}return 0;}S:#include<iostream>#include<algorithm>using namespace std;int main(){int n;int ls[100000];while(cin>>n){for(int m=0;m<n;m++)cin>>ls[m];sort(ls,ls+n);int k=ls[n-1];for(int i=0;i<n;i++){if(k%ls[i]!=0){k++;i=-1;}}cout<<k<<endl;}return 0;}

,今天不想走,明天就要跑了。

杭电 HDU ACM 2028 Lowest Common Multiple Plus

相关文章:

你感兴趣的文章:

标签云: