S个数的最小公倍数,为这S个数中所含素因子的最高次方之间的乘积。
自然数1至50的最小公倍数,
因为,√50≈7,所以,在50之内的数只有≤7的素数涉及N次方。在50之内,2的最高次方的数为32,3的最高次方的数为27,5的最高次方的数为25,7的最高次方的数为49,其余为50之内的素数。
所以,1,2,3,4,5,6,…,50的最小公倍数为:
32*27*25*49*11*13*17*19*23*29*31*37*41*43*47=3099044504245996706400。
#include<stdio.h>
#include<string.h>
int main(){
int n,i,j,s,k,t;
int val[1000];
int num[25]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
while(~scanf("%d",&n)){
memset(val,0,sizeof(val));
val[0]=1;
for(t=i=0;i<25;i++){
if(num[i]<=n){
j=1;
while(j<=n){
j*=num[i];
}
j/=num[i];
for(s=k=0;k<=t;k++){
val[k]=val[k]*j+s;
if(val[k]>9&&k==t){
t++;
}
s=val[k]/10;
val[k]%=10;
}
}else{
break;
}
}
for(i=t;i>=0;i--){
printf("%d",val[i]);
}
printf("\n");
}
return 0;
}