标题:[求助]一道百思不得其解的题
只看楼主
leowsw
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-11-4
得分:0 
嘿嘿,就是这样没错
2006-11-05 14:32
leowsw
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-11-4
得分:0 
我错了,应该是把x分为2^i+3^j+5^k+7^l+.....
列出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最大
2006-11-05 21:53
ysol
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2006-6-11
得分:0 
作过类似的题目

可以把题目分解成2个部分
1、求1000以内所有质数
2、在第1步的基础上找出和为X的质数组

在2的基础上的所有质数组内的质数分别相乘 找出最大的积

[此贴子已经被作者于2006-11-8 19:19:36编辑过]

2006-11-08 19:15
perfect
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:81
专家分:0
注 册:2006-11-19
得分:0 

我是这样写的,先把输入的数分解,再把分解的每种可能的最小公倍数计算出来
比较每次的最小公倍数,把最大的值存放在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);
}


片言可以明百意 坐驰可以役万里
2006-11-20 17:49



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-95364-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.967757 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved