L1-006連續因子
阿新 • • 發佈:2022-03-28
一個正整數 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> using namespace std; #include<vector> int main(){ int n; cin>>n; int count; int max=0; int res=0; int x=0; for(int i=2;i*i<n;i++){ if(n%i==0){ x=n;count=0; for(int j=i;x%j==0;j++){ x/=j;count++; if(count > max){ max = count; res=j; } } } } //cout<<max; //cout<<res; cout<<max<<endl; for(int i=(res-max+1);i<=res;i++){ if(i==res){ cout<<i; }else{ cout<<i<<"*"; } } return 0; }
思路:
本質上還是去尋找因子,可以利用兩層for迴圈去進行遍歷,第一層尋找因子,如果找到,利用第二層去尋找因子可以向後走多少個。不斷更新記錄最大值即可。