L1-006 连续因子 (20 分)

  • 写在前面:从今天开始做PTA上的天梯赛题目集,坚持做题,坚持用博客记录难题,加油!!!

1. 题目

一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数 N(1<N<2 ^31)。
输出格式:
首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1因子2……*因子k 的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。

输入样例:
630
输出样例:
3
5*6*7

2.解题思路

参考代码注释

3.代码

#include <bits/stdc++.h>
 using namespace std;
 int main()
 {
	int n;
	cin>>n;
	int max1=0;//用于记录最长的因子序列的个数
	int pos=0;//用于记录连续因子开始的那个数
	//为保证是最小序列,需要从小往大遍历,
	//又因为不可能存在由比sqrt(n)大的数组成的连续序列且题目中要求序列不包括1,所以应从2到sqrt(n)遍历
	for(int i=2;i<=sqrt(n);i++)
	{
		int n1=n;
	    int max2=0;
		int j=i;
		while(n1%j==0)//当j可以被n1整除时,看j+1,j+2...是否可以被n1整除,直到不能被整除为止
		{
			n1=n1/j;
			j++;
			max2++;
		}
		if(max2>max1)//更新max1和pos的值
		{
			max1=max2;
			pos=i;
		}
	}
	if(max1>0)//如果max1>0,输出相应内容
	{
		cout<<max1<<endl;
		for(int i=pos;i<pos+max1-1;i++)
		{
			cout<<i<<"*";
		}
		cout<<pos+max1-1;
	}
	else if(max1==0)//当max1的值为0时,说明n为素数,素数只能被1和本身整除,此时应输出n
	{
		cout<<"1"<<endl;
		cout<<n<<endl;
	}
 	return 0;
 }
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值