L1-006 连续因子 (20分)
 

一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。

输入格式:

输入在一行中给出一个正整数 N(1<N<231​​)

输出格式:

首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1*因子2*……*因子k 的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。

输入样例:

630
 

输出样例:3

5*6*7

这题开始觉得还挺难的,后来看了网上的题解觉得其实也没有什么太大的含量。

首先那个12出来的原因是因为12!(阶乘)足以满足题目的要求,也就是说,不论是多大的数据,连续乘的数字个数都需要小于12,那么我们就从12个数字开始往下逐渐递减。同时,每一次确定连续乘数字个数后,开始计算,我们从2开始,到根号 n 时结束,找到合适的数据即可输出结果了。最后还需要额外注意一下没有的情况即可。

 

#include<bits/stdc++.h> 

using namespace std;

int main() {
    int n;
    cin>>n; 
    int max = sqrt(n);
    for(int len = 12; len >= 1; len--) {
for(int start = 2; start <= max; start++) {
long long int ans = 1; for(int i = start; i - start <= len - 1; i++) ans *= i;
if(n % ans == 0) { cout<<len<<endl<<start; for(int i = start + 1; i - start <= len - 1; i++) cout<<"*"<<i; return 0;
} } } cout
<<1<<endl<<n; return 0; }
posted on 2020-08-21 12:09  夜_归_人  阅读(251)  评论(0编辑  收藏  举报