我正在设计一种算法,以找出在某个整数n中存在的最大因子数。这个问题在R.G.Dormey的“如何通过计算机解决”中给出。 你能帮助我如何设计算法..答案必须是整数n和因子数的一个因素..
解决方案我想到了:
首先确认整数不是素数。如果素数,没有进一步的解决方案..
如果不是素数,找出整数的最大因子
检查它是否是一个因子数字。
如果是,那就是答案
如果没有,找出整数的第二大因子..
检查它是否是一个因子数...
依旧......
答案 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是输入数字