版权声明:学习交流: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<231)。
输出格式:
首先在第 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;
}