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
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;
}
發佈了24 篇原創文章 · 獲贊 7 · 訪問量 6829
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章