求下面的算法!(不要笑我)
小第想问一个问题假如输入一个数值(这个数字是100以内不重复的数值的剩积)
怎么知道他是由那些数值相剩所得呢
?想
哦!
搜索更多相关的解决方案:
算法
----------------解决方案--------------------------------------------------------
我想从(100--)开始 求出余数和被除数
然后再从余数和被除数里再这样一直分解下去!
可是想的半天觉得很复杂~
~~哎~~求救哦!
----------------解决方案--------------------------------------------------------
没看懂什么意思~~~
----------------解决方案--------------------------------------------------------
有个苯办法:
拿这个数和依次和素数相除,看能否被整除,能就拿结果继续和素数除,素数有小到大开始,能被整除就不用和下面的素数相除了
----------------解决方案--------------------------------------------------------
恩,我也只能想到楼上那种方法了,
小学时做的因式分解。
----------------解决方案--------------------------------------------------------
分出来以后呢?由哪些数字的乘积组成这个数字的?这算法还要实现也是问题。要把各种可能打印出来呢?
----------------解决方案--------------------------------------------------------
确实很麻烦。
----------------解决方案--------------------------------------------------------
还好啊,不是很麻烦,素数最大就是除数的一半就行了
----------------解决方案--------------------------------------------------------
可是要考虑所有满足条件的情况,因为题目不是说只要一个最简单的组合,毕竟不是因式分解,只有一种情况。
所以,这个东西虽然做起来不难,但是写起来很麻烦。
----------------解决方案--------------------------------------------------------
这个是40以内的,要是100的话只要在sum[]中填写小于50的素数,并修改相应的sum[]的最大坐标
int main()
{
int sum[8]={2,3,5,7,11,13,17,19};
int a,b,i=0;
int ret[50],s=0;
printf("input a number(<40);");
scanf("%d",&a);
b=a;
while((sum[i]<a/2 && i<8))
{
if(a%sum[i]==0)
{
//printf("%d,%d\n",sum[i],a/sum[i]);
ret[s]=sum[i];
a=a/sum[i];
i=0;
s++;
}
else
i++;
}
for(i=0;i<s;i++)
{
printf("%d*%d\n",ret[i],b/ret[i]);
ret[i+1]=ret[i+1]*ret[i];
}
}
----------------解决方案--------------------------------------------------------