C语言基础之求20,c语言求1~20最小公倍数

满意答案

dcebd7a0de6265b6ccae5ead692f1eab.png

bnna15

2013.11.19

dcebd7a0de6265b6ccae5ead692f1eab.png

采纳率: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分享举报

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值