L1-006 连续因子
作者:互联网
本来看到题目,我的第一反应是for循环找出N的所有因子,把他们存在一个数组里,然后把他们相乘,并排列成最长的连续因子,但是这样实现起来好像有点复杂,想到这是L1的题目,应该不会这么难,应该是我思路错了。
正解
用for循环,i从2开始到sqrt(N),记录从i开始的最长连续因子的个数count,如果比之前的max还要大,那么max=count,连续因子的起始位置start=i,遍历过后,start就是最长连续因子的起点,max是最长连续因子的长度,输出即可。
代码
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int n,k,i,j,count,max_count=0,start;
cin>>n;
for(i=2;i<=sqrt(n);i++)
{
count=0;
j=i;
k=n;
while(k%j==0)
{
k=k/j;
j++;
count++;
}
if(max_count<count)
{
max_count=count;
start=i;
}
}
if(max_count)
{
cout<<max_count<<endl;
for(i=0;i<max_count-1;i++)
{
cout<<start+i<<"*";
}
cout<<start+i<<endl;
}
else
{
cout<<1<<endl<<n<<endl;
}
return 0;
}
注意
- 最后要有一个if语句,如果N是素数,比如11,那只用输出1\n11,如果不是素数,就用for循环输出最长连续因子
- 一开始提交的时候部分错误,有几组数据超时了,经过分析,是因为max没有赋初值,默认是一个很大的值,如果N是素数,在找最长连续因子的时候max的值不会被修改,那么在最后输出结果的时候会输出很长很长,导致超时。
标签:count,max,start,因子,006,L1,最长,连续 来源: https://www.cnblogs.com/sxlo/p/16414641.html