题目大意:找出N的所有连续因子中,第一个长度最长的连续因子串。例如,630 = 3 * 5 * 6 * 7,应当输出5 * 6 * 7。
总体思路是,从 2 到 sqrt(N)进行遍历,如果遍历到 N 的因子,那么将它作为起点,持续向后累加,直到不是N的因子为止,记录这个因子串的长度,如果是最大的,那么就更新最长因子串的起点记录。
坑点是如果是质数,应当输出它本身。而sqrt(N)是遍历不到的,只有通过记录的最大因子串长度为0来判断这一点。
另外需要注意的是在循环里找连续因子的时候,不能直接使用循环变量i,另外设置一个变量作为因子。
思路看起来比较简单,但对我来说还是一时想不到。这个问题只要求找到最大连续因子串的长度,并不要求做因式分解,不需要想的太复杂。
AC代码:
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
int N;
scanf("%d", &N);
int maxSize = 0, start = 0;
for (int i = 2; i <= sqrt(N); ++i)
{
int num = N;
int cnt = 0;
int factor = i;
if(num % factor == 0)
{
while(num % factor == 0)