【PAT甲级 - C++题解】1096 Consecutive Factors

简介: 【PAT甲级 - C++题解】1096 Consecutive Factors

1096 Consecutive Factors

Among all the factors of a positive integer N, there may exist several consecutive numbers. For example, 630 can be factored as 3×5×6×7, where 5, 6, and 7 are the three consecutive numbers. Now given any positive N, you are supposed to find the maximum number of consecutive factors, and list the smallest sequence of the consecutive factors.


Input Specification:

Each input file contains one test case, which gives the integer N (1<N<231).


Output Specification:

For each test case, print in the first line the maximum number of consecutive factors. Then in the second line, print the smallest sequence of the consecutive factors in the format factor[1]*factor[2]*...*factor[k], where the factors are listed in increasing order, and 1 is NOT included.


Sample Input:

630

Sample Output:

3
5*6*7


题意

在一个正整数 N 的所有因子中,可能存在几个连续的数字。


例如,630 可以分解为 3 × 5 × 6 × 7 3×5×6×73×5×6×7 ,其中 5、6、7 是三个连续的数字。


现在给定任意正整数 N ,请你找到最大连续因子数,并列出连续因子的最小序列。


思路

我们可以枚举每一个起点,然后再去从该起点出发找出连续因子。

注意,题目需要输出最长的连续因子,且最长长度下连续因子的起点需要最小。


代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin >> n;
    vector<int> res;
    for (int i = 2; i <= n / i; i++)
        if (n % i == 0)    //判断是否为约数
        {
            vector<int> seq;
            //找出连续因子
            for (int m = n, j = i; m % j == 0; j++)
            {
                seq.push_back(j);
                m /= j;
            }
            //更新最长的连续因子
            if (seq.size() > res.size())   res = seq;
        }
    //如果是质数,则直接输出
    if (res.empty()) res.push_back(n);
    //输出结果
    cout << res.size() << endl;
    cout << res[0];
    for (int i = 1; i < res.size(); i++)   cout << "*" << res[i];
    cout << endl;
    return 0;
}
目录
相关文章
|
C++
【PAT甲级 - C++题解】1040 Longest Symmetric String
【PAT甲级 - C++题解】1040 Longest Symmetric String
76 0
|
算法 C++
【PAT甲级 - C++题解】1044 Shopping in Mars
【PAT甲级 - C++题解】1044 Shopping in Mars
109 0
|
C++
【PAT甲级 - C++题解】1117 Eddington Number
【PAT甲级 - C++题解】1117 Eddington Number
95 0
|
存储 C++ 容器
【PAT甲级 - C++题解】1057 Stack
【PAT甲级 - C++题解】1057 Stack
97 0
|
存储 C++
【PAT甲级 - C++题解】1055 The World‘s Richest
【PAT甲级 - C++题解】1055 The World‘s Richest
86 0
|
C++
【PAT甲级 - C++题解】1051 Pop Sequence
【PAT甲级 - C++题解】1051 Pop Sequence
90 0
|
人工智能 BI C++
【PAT甲级 - C++题解】1148 Werewolf - Simple Version
【PAT甲级 - C++题解】1148 Werewolf - Simple Version
155 0
|
3天前
|
编译器 C语言 C++
类和对象的简述(c++篇)
类和对象的简述(c++篇)
|
1月前
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
69 19
|
1月前
|
存储 编译器 数据安全/隐私保护
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
51 13