1. 程式人生 > >PTA天梯賽練習集 L1-006 連續因子 (20 分)

PTA天梯賽練習集 L1-006 連續因子 (20 分)

一個正整數 N 的因子中可能存在若干連續的數字。例如 630 可以分解為 3×5×6×7,其中 5、6、7 就是 3 個連續的數字。給定任一正整數 N,要求編寫程式求出最長連續因子的個數,並輸出最小的連續因子序列。

輸入格式:

輸入在一行中給出一個正整數 N(1<N<2^31)。

輸出格式:

首先在第 1 行輸出最長連續因子的個數;然後在第 2 行中按 因子1因子2……*因子k 的格式輸出最小的連續因子序列,其中因子按遞增順序輸出,1 不算在內。

輸入樣例:

630

輸出樣例:

3 567

解題思路:

在區間內先利用迴圈判斷該數是不是完數,如果是完數,則輸出,並標記t=0,如果區間內沒有完數即t=1,輸出None。

事例程式碼:

#include<stdio.h>
int main() 
{
	int i,j,m,n,k;
	int t=1;
	scanf("%d%d",&m,&n);
	if(1<=m<=n<=10000)
	{
		for(i=m;i<=n;i++)
		{
			int sum=0;//初始化sum的值 
			for(j=1;j<i;j++)
			{
				if(i%j==0)
				{
					sum+=j;
				}
			}
			if(sum==i)
			{
				t=0;//標記該數為完數;
				printf("%d = 1"
,sum) ; for(k=2;k<sum;k++) { if(sum%k==0) { printf(" + "); printf("%d",k); } } printf("\n");//判斷一個數為完數以後換行一次; } } } if(t==1) { printf("None");//如果區間內沒有完數,輸出None; } }