一個正整數 N 的因子中可能存在若干連續的數字。例如 630 可以分解爲 3×5×6×7,其中 5、6、7 就是 3 個連續的數字。給定任一正整數 N,要求編寫程序求出最長連續因子的個數,並輸出最小的連續因子序列。
輸入格式:
輸入在一行中給出一個正整數 N(1<N<231)。
輸出格式:
首先在第 1 行輸出最長連續因子的個數;然後在第 2 行中按 因子1*因子2*……*因子k
的格式輸出最小的連續因子序列,其中因子按遞增順序輸出,1 不算在內。
輸入樣例:
630
輸出樣例:
3
567
思路爲從2開始累乘(加1),緊接着就判斷是否乘積是其因子
如果是,那麼記錄下來長度,開始的i;
一直到乘積大於n停止;
然後使乘積(prd)等於1;i++;
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;//簡寫 ,使用long long更好
int main(){
ll n;
cin>>n;
ll prd;//是乘積(product)
int start=0,len=0;
for(int i=2;i<=sqrt(n);i++){//sqrt是爲了最後一個點過去(減少計算量)
prd=1;
for(int j=i;prd<n;j++){
prd*=j;
if(n%prd==0&&j-i+1>len){
start=i;
len=j-i+1;
}
}
}
if(start==0){//等於0的話就意味着它是一個質數!那麼排去1.他的因子就只有本身了。
start=n;
len = 1;
}
cout<<len<<endl<<start;
for(int i=start+1;i<start+len;i++)
cout<<"*"<<i;
return 0;
}