连接:http://acm.nyist.net/JudgeOnline/problem.php?pid=517
最小公倍数
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
为什么1小时有60分钟,而不是100分钟呢?这是历史上的习惯导致。但也并非纯粹的偶然:60是个优秀的数字,它的因子比较多。事实上,它是1至6的每个数字的倍数。即1,2,3,4,5,6都是可以除尽60。我们希望寻找到能除尽1至n的的每个数字的最小整数m.
-
输入
-
多组测试数据(少于500组)。
每行只有一个数n(1<=n<=100).
输出
- 输出相应的m。 样例输入
-
2 3 4
样例输出
-
2 6 12
#include<stdio.h> #include<string.h> const int M=100; int num[M],str[7],max; void f(int n) { int jin=0,term,i; for(i=0;i<=max;i++) { term=str[i]*n+jin; jin=term/1000000;//一个整形存放6位数 str[i]=term%1000000; if(i==max&&jin!=0)max++; } } int main() { int i,n,j,term,sum; while(~scanf("%d",&n)) { max=0; memset(num,0,sizeof(num)); memset(str,0,sizeof(str)); str[0]=1; ///这句话容易忘记 for(i=2;i<=n;i++) ///把1到n与处理成质数 { term=i; for(j=2;j<=term;j++) { sum=0; while(term%j==0) { sum++; term/=j; } if(num[j]<sum)num[j]=sum; } } for(i=2;i<M;i++)for(j=0;j<num[i];j++)f(i); printf("%d",str[max]); for(i=max-1;i>=0;i--)printf("%06d",str[i]); putchar(10); } return 0; }