
列出500前的素数,先用x-=2-=3-=5-=7-=11-=。。。直到剩下的x<下一位素数时分析i,j。。。各为多少
如:17=2+3+5+7,则2×3×5×7=210最大,25=2+3+5+7+8=(2+2)+(3+6)+5+7=2^2+3^2+5+7,则4×9×5×7最大
我是这样写的,先把输入的数分解,再把分解的每种可能的最小公倍数计算出来
比较每次的最小公倍数,把最大的值存放在max中
只能计算0到100左右的数,请各位多多指点
#include <stdio.h>
int a[1000];
unsigned long max=0;
int maxnum(int m, int n) /* 求最大公约数 */
{
int temp;
if(m<n)
{
temp=m;
m=n;
n=temp;
}
while(m%=n)
{
temp=m; m=n; n=temp;
}
return n;
}
unsigned long minum(int m, int n) /* 最小公倍数 */
{
unsigned long num;
num=maxnum(m,n);
return (m*n/num);
}
void put( int n) /* 将一个数分解 */
{
int i,j,l;
unsigned long m=a[1];
for(i=2; i<=n; i++)
m=minum(a[i],m);
if(max<m) /* 比较后,取最大的公倍数 */
max=m;
j=n; l=a[j];
for(i=a[j-1]+1; i<l/2; i++)
{
a[j]=i;
a[j+1]=l-i;
put(j+1);
}
}
main()
{
int i,n;
printf("please input a number : ");
scanf("%d",&n);
for(i=1; i<=n/2; i++)
{
a[1]=i;
a[2]=n-i;
put(2);
}
printf("最大的公倍数是 %d\n",max);
}