PTA团队天梯赛║L1-006 连续因子
PTA 团队天梯赛║L1-006 连续因子
一、题目要求
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数 N(1<N<231)。
输出格式:
首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子 1*因子 2*……*因子 k
的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。
输入样例:
1 | 630 |
输出样例:
1 | 3 |
二、解题思路
根据 N 的值的取值范围小于等于 231,而这个值介于 12 的阶乘到 13 的阶乘之间,所以我们可以得到最大的值应该是 12 个数连续相乘,又因为 1 不计算在内,所以最多只要有 11 为连续因子即可。
用暴力的思想,我从 2、3、4…sqrt(N) 开始乘,连着乘以 11 位,10 位,9 位…以此类推。
即连续乘 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 相乘
…
直到只有 1 位时,过程中只要有一个乘积 S 使得 N%S==0
,就可以认为找到了连续因子。
为了优化代码,在每次乘的时候如果当前的乘积已经大于 N 了,就没有继续乘的必要了。
三、代码
1 |
|
四、反思总结
v1.0 最后两个测试点没有通过,还没有想通是哪里出现问题。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 May.BYT's Blog!
评论