题目链接:点击查看
题目描述:
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入输出:
输入
630
输出
3
5*6*7
题目分析:
本题思路为用最简单粗暴的枚举法不断构造连乘,看连乘的积是否是num的因数,如果是,则看这部分连乘的数的个数是否比已记录的多,多的话则进行替换。
代码:
#include<iostream>
#include<cmath>
using namespace std;
long int num,temp;
int main()
{
cin>>num;
int first=0,len=0,maxn=sqrt(num)+1;//first记录连乘的第一个数字,maxn表示因数的最大上限
for(int i=2;i<=maxn;i++)
{
int j;
temp=1;
for(j=i;j<=maxn;j++)
{
temp*=j;
if(num%temp!=0)
break;
}
if(j-i>len)
{
len=j-i;
first=i;
}
}
if(first==0)//表示num为一个质数或1
{
cout<<1<<endl<<num;
}
else
{
cout<<len<<endl;
for(int i=0;i<len;i++)
{
cout<<first+i;
if(i!=len-1)
cout<<'*';
}
}
}