最大因子数在某个整数n中表示为一个因子

时间:2011-07-04 13:40:48

标签: algorithm factorial factorization

我正在设计一种算法,以找出在某个整数n中存在的最大因子数。这个问题在R.G.Dormey的“如何通过计算机解决”中给出。 你能帮助我如何设计算法..答案必须是整数n和因子数的一个因素..

解决方案我想到了:

首先确认整数不是素数。如果素数,没有进一步的解决方案..

如果不是素数,找出整数的最大因子

检查它是否是一个因子数字。

如果是,那就是答案

如果没有,找出整数的第二大因子..

检查它是否是一个因子数...

依旧......

5 个答案:

答案 0 :(得分:4)

将N除以1,然后将结果除以2,然后将结果除以3,...然后除以k + 1。一旦k + 1没有整数结果,k!是一个答案。

答案 1 :(得分:2)

您正在寻找进入整数的最大因子,因此您只需要稳步增加因子。即检查结果整数是否可以被2,3,4等整除......第一次出现故障时,你知道没有更大的阶乘将除以你的整数。例如。如果你的整数可以被2 ... 6而不是7整除,你知道答案是6!。

答案 2 :(得分:0)

鉴于阶乘的特性非常快,非常大......我很想尝试直接划分它。 首先找到小于你的数字的最大阶乘...然后通过划分开始检查 例如:让N为你的号码。让阶乘f(fac,num)成为你的阶乘函数,它返回一个比你的数字小的阶乘。这样的数量! = fac   然后执行以下操作:

检查(N%fac)== 0;否则尝试(N * num)%fac然后(N *(num)*(num-1))%fac

第一种情况下你需要的答案是(num)(第二种情况是num-1),依此类推

答案 3 :(得分:0)

long prod = 1;
long maxFactor = 1;

for(long i=2; i<=n && prod< n && n%i==0 ;i++){

    prod  = prod*i;
    if(n%prod == 0) maxFactor = prod;
}

这里n是我们需要找出最大因子因子的数字,而macFactor的最终值是最终解决方案。

注意:数字因子的因素也是数字的因素。

如果因子是一个因子值,则它必须是从1开始的连续整数的乘积(换句话说,它应该是其自身以外的因子的乘积)

答案 4 :(得分:0)

#include<stdio.h>
main()
{
      int i,n;
      scanf("%d",&n);
      for(i=2;n>1&&n%i==0;i++)
      n/=i;
      printf("%d",i-1);
}

n是输入数字