#include<stdio.h>
#include<math.h>
int main(void)
{
int N
, m
;
long long int sum
;
scanf("%d", &N
);
m
= sqrt(N
);
for (int i
= 11; i
>= 1; i
--)
{
for (int j
= 2; j
<= m
; j
++)
{
sum
= 1;
for (int k
= j
; k
<= j
+ i
- 1; k
++)
{
sum
*= k
;
if (sum
> N
)
break;
}
if (N
% sum
== 0)
{
printf("%d\n", i
);
for (int u
= 1;u
<= i
; u
++)
{
printf("%d",j
+ u
- 1);
if (u
!= i
)
printf("*");
}
return 0;
}
}
}
printf("1\n%d", N
);
}
在解析连续因子时,要注意质数,不然会答案错误。
上述代码使用的是暴力尝试因子的方法。 2的31次方,大概是12的阶乘和13的阶乘之间,所以最大可以是12个数的相乘,1除外,所以是最大11个数相乘。
分析:
根据N的值的取值范围小于等于2的31次方,而这个值介于12的阶乘到13的阶乘之间,所以我们可以得到最大的值应该是12个数连续相乘,又因为1不计算在内,所以最多只要有11为连续因子即可。
采用暴力的思想,我们让他分别从2、3、4…sqrt(N)开始乘,连着乘11位、10位…1位。
即连续乘11位时分别为:
2 3 4 5 6 7 8 9 10 11 12相乘
3 4 5 6 7 8 9 10 11 12 13相乘
…
连续乘10位时分别为:
2 3 4 5 6 7 8 9 10 11相乘
3 4 5 6 7 8 9 10 11 12相乘
…