【发布时间】:2014-08-11 00:22:03
【问题描述】:
我必须做一个程序来找到显示n的最大方式!数字(不包括 1)。
例如:4! = 1x2x3x4 = 1x2x3x2x2。所以你可以使用 5 个数字的乘积来显示 4!。 所以输入是4,输出是5。 5 是表示 4! 的最大数量。
简单来说就是在素因数中分解一个阶乘数,计算它们的数量并显示出来。
我所做的是一个“for”循环,我计算 1 到“n”的所有质因数及其数量。
但是我有一个问题,比如当“n”是 100000 时,需要 8 秒才能完成。我需要提高速度。
我认为问题出在分解函数中。
int factors( int fact )
{
int i,cont,product=1, control;
cont=0;
control=fact;
for (i= 2;control != product;)
{
if ((fact%i == 0))
{
cont++;
fact/=i;
product*=i;}
else
i++;
}
return cont;
}
我需要改进它以获得最佳执行时间。或者也许我用来从阶乘中获取质因数的方法不是一个好的选择?
注意:我不计算 100000 的值!。我只是分解从 1 到 10000 的所有数字并计算它们。
【问题讨论】:
-
4!不等于1x2x3x4x5 -
澄清一下,您要计算
100000!的值?你有什么想法just how big that number is? -
顺便说一句,您可以将其视为算术(或数论)数学练习。提示:你可能不需要计算
100!来获得它的最大素因子。 -
如果是 7!是输入。输出是 8 (2x3x2x2x5x2x3x7)...我不是在计算 7 的值!,只是主要因素的数量。
-
@FiddlingBits 告诉我的老师哈哈。我认为如果你不关心需要多少时间,这不是一个很难解决的问题。执行时间不是作业的要求,我只是痴迷于改善那个时间。
标签: c math factorial prime-factoring