1. 程式人生 > >PAT團體程式設計天梯賽 L1-006. 連續因子

PAT團體程式設計天梯賽 L1-006. 連續因子

一個正整數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
#include <iostream>  //此程式碼拷貝柳婼大神 https://github.com/liuchuo 
#include <cstdio>
#include <cmath>
using namespace std;

int main() {
    int n;
    scanf("%d", &n);
    int max = sqrt(n);
    for(int len = 12; len >= 1; len--)  //最長連續因子大概個數為12 
     {
        for(int start = 2; start <= max; start++) //在其因子範圍(2~sqrt(n))內暴力查詢 
         {
            long long int ans = 1;
            
            for(int i = start; i - start <= len - 1; i++)    //階乘 
             {
                ans *= i;
             }
             
            if(n % ans == 0) //如果匹配到,即整除 
             {
                 
                printf("%d\n%d", len, start);
                
                for(int i = start + 1; i - start <= len - 1; i++)
                 {
                    printf("*%d", i);
                 }
                return 0;
             }
         }
     }
    
    return 0;
}