代码改变世界

PATA1096 Consecutive Factors

2019-03-25 23:20  legend聪  阅读(194)  评论(0编辑  收藏  举报

这道题一开始比较难想,因为感觉情况有很多无法比较存储。看了答案才知道用的是很自然的枚举,从2开始进行枚举,判断长度,选出最长的输出。前几个数字比较容易出错2,4,8,7,14这些,整体难度不算太大。

#include<cstdio>
#include<math.h>
#include<algorithm>
typedef long long ll;
using namespace std;
int main()
{
    ll n;
    scanf("%lld", &n);
    int i, j;
    int anslen = 0;
    int temp = 1;
    ll sqr = (ll)sqrt(n);
    int st, ed;
    for (i = 2; i <= sqr ; i++)
    {
        temp = 1;
        j = i;
        while (1)
        {
            temp *= j;
            if (n%temp != 0)
            {
                break;
            }
            else if (j - i + 1 > anslen)
            {
                anslen = j - i + 1;
                st = i;
                ed = j;
            }
            j++;
        }
    }
    if (anslen == 0)
    {
        printf("1\n%lld\n", n);
    }
    else
    {
        printf("%d\n", anslen);
        for (i = 0; i < anslen; i++)
        {
            if (i != anslen - 1)
            {
                printf("%d*", st);
                st++;
            }
            else
                printf("%d\n", st);
        }
    }
    //printf("\n");
}