天梯赛题解 L1-006 连续因子

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

输入格式:
输入在一行中给出一个正整数 N(1<N<2
​31
​​ )。

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

输入样例:
630
输出样例:
3
5*6*7
作者: 陈越
单位: 浙江大学
时间限制: 400 ms
内存限制: 64 MB

  

这道题卡了有点久....一开始是想用质数去分解出质因数,然后用质因数做。

做了半天,发现太复杂了。

直接暴力枚举就可以了。

#include <iostream>
#include <cmath>
using namespace std;
long long N;
long long const INF = 0x3f3f3f3f;
int main(){
    cin >> N;
    int cnt = 0;
    int len = 0,s;
    long long sum = 1;
    for(int i=2;i<=sqrt(N);++i){
        for(int j=i;j<=N;++j){
            sum*=j;
            if(N%sum == 0){
                ++cnt;
            }else{
                if(len < cnt){
                    len = cnt;
                    s = j-1;
                }
                sum = 1;
                cnt = 0;
                break;
            }
        }
    }
    if(len){
        cout << len << endl;
        for(int i=0,j=s-len+1;i<len;++i,++j){
            cout << j << (i==len-1?"":"*");
        }        
    }else{
        cout << 1 << endl;
        cout << N << endl;    
    }
    return 0;
}
原文地址:https://www.cnblogs.com/--zz/p/10602004.html