1096 Consecutive Factors (20分)

Among all the factors of a positive integer N, there may exist several consecutive numbers. For example, 630 can be factored as 3×5×6×7, where 5, 6, and 7 are the three consecutive numbers. Now given any positive N, you are supposed to find the maximum number of consecutive factors, and list the smallest sequence of the consecutive factors.
Input Specification:

Each input file contains one test case, which gives the integer N (1<N<2​31​​).
Output Specification:

For each test case, print in the first line the maximum number of consecutive factors. Then in the second line, print the smallest sequence of the consecutive factors in the format factor[1]factor[2]…*factor[k], where the factors are listed in increasing order, and 1 is NOT included.
Sample Input:

630

Sample Output:

3
5*6*7

题意:将一个整数N分解为多个数的乘积(不包括1),找出其中的连续乘积整数,并比较他们的长度,输出最大长度,以及对应最大长度的连续数(按递增输出),如果有多个长度相等的连续数,则输出起始数最小的那个
这道题蛮难的(大家好好体会,不太好想)

AC代码

#include<stdio.h>
#include<math.h>
int main(){
	int n;
	scanf("%d",&n);
    int k=(int)sqrt(1.0*n);//连续数大小不会超过sqrt(n)
	int len=0,ans=0;//len代表连续数的长度,ans代表连续数的起始位
	for(int i=2;i<=k;i++){//从2开始
		int temp=1,j=i;
		while(1){
			temp=temp*j;//连续数乘积
			if(n%temp!=0)break;//如果n%temp不为0,说明temp这个数不能做n的除数,就要否定之前的所有数,重新开始
			if(j-i+1>len){//更新长度
				len=j-i+1;
				ans=i;//更新起始位
			}
			j++;//j自增接着进行while判断,更新len,ans
		}
	}
	if(len==0){
		printf("1\n%d",n);
	}else{
		printf("%d\n",len);
		for(int i=0;i<len;i++){
			printf("%d",i+ans);
			if(i<len-1){
				printf("*");
			}
		}
	}
	printf("\n");
	return 0;
}

注意:起始代码中的temp变量类型应替换成long long型的,因为当N比较大时候,同时i也乘到的一个比较大的位置这个时候temp的累乘就会出现溢出,导致错误。不过pat测试点中并没有这种情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值