最长连续因子
输入一个整数,输出其最长连续因子。
例如
输入:60
输出:2 3 4 5 6
注意:1不算因子
用的oj 如果不判定n==1的话会报错,个人感觉有点矛盾了。C代码如下:
#include <stdio.h>
#include <math.h>
/*找出从2开始到sqrt(n)的所有因子,存入数组factor,从其中找出最长的连续因子*/
int main()
{
int n;
int factor[200]={0};//因子数组
int count=0;
int pos;//最后一个连续因子的位置
int start,end=0;//最大因子的起始位置
int len=1;//最大因子长度
int j;
scanf("%d",&n);
if(n==1)
printf("%d",n);
else
{
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
factor[count++]=i;
}
}
for(int i=0;i<count;i++)//确定最大因子长度及最后一个连续因子的位置
{
j=i;
start=i;
for(j=i;j<count;)
{
if(factor[j]==factor[j+1]-1)//判断是否连续
{
j++;
}
else
break;
}
pos=j;
if(pos-start+1>len)
{
len=pos-start+1;
end=pos;
}
i=pos;
}
if(len==1)//最大长度是1的情况,直接输出因子数组的第一个值
printf("%d",factor[0]);
else
{
for(int i=end+1-len;i<=end;i++)
{
printf("%d ",factor[i]);
}
}
}
printf("\n");
return 0;
}