L1-006 连续因子 (20分)

Posted keepz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了L1-006 连续因子 (20分)相关的知识,希望对你有一定的参考价值。

题意分析

技术图片

题目中已经将意思说的很清楚了,就是输出一个数的最长连续因子的个数,并且输出是哪几个因子相乘。可以将题目从这两个角度进行分析:

  • N为素数时,最长连续因子的个数为1,即它自己。
  • N不为素数时,即N为合数时,暴力模拟即可,将连续的数进行累积,直到累积后的结果不能被N整除为止,这样就能够不断更新最长连续因子的个数,预保留第一个数,就可以在最终输出是能够直接输出这几个连续因子。

AC代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<bitset>
#include<cassert>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<deque>
#include<iomanip>
#include<list>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
using namespace std;
typedef long long ll;
typedef long double ld;
int N;
bool isprime(int n)
{
    if(n == 2)
        return true;
    for(int i = 2; i <= sqrt(n); i++)
    {
        if(n % i == 0)
            return false;
    }
    return true;
}
int main()
{
//    freopen("input.txt", "r", stdin);
//    freopen("output.txt", "w", stdout);
    scanf("%d", &N);
    if(isprime(N))
    {
        cout << 1 << endl;
        cout << N << endl;
    }
    else
    {
        int maxlen = 0, x;
        for(int i = 2; i <= sqrt(N); i++)
        {
            if(N % i == 0)
            {
                int sx = i;
                int j;
                for(j = i + 1; j <= sqrt(N); j++)
                {
                    sx *= j;
                    if(N % sx != 0)
                        break;
                }
                if(maxlen < j - i)
                {
                    maxlen = j - i;
                    x = i;
                }
            }
        }
        cout << maxlen << endl;
        for(int i = x; i <= x + maxlen - 1; i++)
        {
            if(i != x)
                cout << "*";
            cout << i;
        }
        cout << endl;
    }
}

以上是关于L1-006 连续因子 (20分)的主要内容,如果未能解决你的问题,请参考以下文章

PTA L1-006 连续因子 (20分)

L1-006 连续因子 (20 分) 模拟

L1-006 连续因子 (20分) 一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 567 就是 3 个连续的数字。给定任一正整数 N,要求编写程序

题解PTA团体程序设计天梯赛L1-006 连续因子 (20 分) Go语言|Golang

L1-006 连续因子

L1-006. 连续因子