文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。
Description
有N个正整数,它们的最小公倍数是多少?
Input
数据包含两行,第一行是一个整数N (1<=N<=10),第二行包含n个不超过10^9正整数。
Output
输出N个数的最小公倍数。
Tips:想了一下午才想到一个“相对比较高效”的算法,核心还是这个公式:两数乘积=两数最大公约数*两数最小公倍数。
只不过这次用到的是 两数最小公倍数=两数乘积/两数最大公约数。每两个数个一组依次向后求就可以了,嘿嘿~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <stdio.h> int slyar(int x,int y) //计算两个数的最大公约数 { while(x>y?(x%=y):(y%=x)); return x+y; } int main() { int i,n,a[100],sum; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); sum=a[0]; for(i=1;i<n;i++) sum=sum*(a[i]/slyar(a[i],sum)); printf("%d\n",sum); return 0; } |
转载请注明:Slyar Home » 求N个正整数的最小公倍数 C语言版