团体程序设计天梯赛-练习集 L1-006 连续因子 (20 分)

版权声明:学习交流:qq709079239 https://blog.csdn.net/qq_43267360/article/details/88557644

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
5*6*7

 tips: 1.迭代:迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。

重复执行一系列运算步骤,从前面的量依次求出后面的量的过程。此过程的每一次结果,都是由对前一次所得结果施行相同的运算步骤得到的。例如利用迭代法*求某一数学问题的解。

对计算机特定程序中需要反复执行的子程序*(一组指令),进行一次重复,即重复执行程序中的循环,直到满足某条件为止,亦称为迭代。

           2.本题中如果用int类型定义yinzi和n,会出现浮点错误。long long 即可解决。

#include<bits/stdc++.h>
using namespace std;
int main(){
	long long n;
	long  yinzi;
	int length=0,start=0;
	cin>>n;
	for(int i = 2;i<=sqrt(n);i++)
	{
		yinzi=1;
		for(int j =i;j*yinzi <= n;j++)
		{
			yinzi*=j;
			if(n%yinzi==0 && j-i+1>length) 
			{
				length = j-i+1;
				start = i;
			}
		}
	}
	if(start == 0)
	{
		start =n;
		length =1;
	}
	cout<<length<<endl<<start;
	for(int i=start+1;i<start+length;i++)
	{
		cout<<"*"<<i; 
	}
	return 0;
	
}

	

猜你喜欢

转载自blog.csdn.net/qq_43267360/article/details/88557644