1. 程式人生 > 其它 >連續因子

連續因子

一個正整數 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

answer

#include <stdio.h>
#include <math.h>
int main(){
	int start = 0;
	int len = 0;
	int N;
	scanf("%d",&N);
	for(int i = 2;i < sqrt(N);i++){//計算到該數的開平方即可 
		int j = i;
		int l = 0;
		int n = N;
		while(n % j == 0){//窮舉可除盡且連續的 
			n = n / j;
			j++;
			l++;
		}
		if(len < l){//更新最大長度 
			start = i;
			len = l;
		}		
	}
	if(start == 0){//該數是素數
		start = N;
		len = 1;
	}
	printf("%d\n",len);
	int cnt = 1;
	printf("%d",start);
	for(int i = start+1;cnt < len;i++,cnt++)
		printf("*%d",i);	 
	return 0;
}