满意答案
bnna15
2013.11.19
采纳率:48% 等级:12
已帮助:5427人
//先求出每个数的素数因子,然后取大值, 如4 6 9, 4=2*2,6=2*3;9=3*3;
//4和6比较, 4中2有2个,3有0个, 6有2一个3一个,所以取4的2个2, 6中1个3;就是2*2*3
//其他同理。公倍数就是最后取下来的因子的积
#include
#include
#include
#define MAX 1000
void Prime(int p[]);
int a[MAX], b[MAX], c[MAX];
int main()
{
int N, NE, i, j, TM, tt;
double ce;
Prime(b);
N=20; //N=100, 求1-N的公倍数
TM=0; ce = 1.0;
memset(a, 0, sizeof(a));
for (i=1;i<=N;i++)
{
NE =i;
if(NE > TM) TM=NE;
if(b[NE]==0 && a[NE]==0)
{a[NE]++;
continue;
}
memset(c, 0, sizeof(int)*TM);
for(j=2;j<=NE;j++)
if(b[j]==0 &&(NE%j==0))
{c[j]++; NE/=j;j=1;}
for (j=2;j<=TM;j++)
if(c[j]>a[j]) a[j]=c[j];
}
for (i=2;i<=TM;i++)
{
if(a[i])
while(a[i]--)
ce*=i;
}
printf("%.0f\n",ce);
return 0;
}
void Prime(int p[])
{
int i, j;
memset(p, 0, sizeof(p));
p[0]=1;p[1]=1;
for (i=2; i<=sqrt(MAX*1.0);i++)
if(!p[i])
for (j=2; j*i
p[i*j]=1;
}
//答案:
232792560
Press any key to continue
00分享举报