题目:
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数 N(1<N<
2
31
2^{31}
231 )。
输出格式:
首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1因子2……*因子k 的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。
输入样例:
630
输出样例:
3 567
分析:
这个题我wa了很遍,有必要写一下: 1.读通题意,是连续的因子,而且连续的因子相乘,还为原数的因子。 2.同是原数因子问题,while循环不能改变i,保证每一个因子便利一遍。 简单题卡了我一个小时,垃圾
AC代码:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std
;
int n
,a
,b
,num
,ma
,x
,y
;
int main()
{
scanf("%lld",&n
);
int m
=sqrt(n
);
b
=n
,num
=ma
=0;
for(int i
=2; i
<=m
; i
++)
if(n
%i
==0)
{
num
=0;
x
=y
=i
;
while(n
%x
==0)
{
num
++;
y
++;
x
*=y
;
}
if(num
>ma
)
{
ma
=num
;
b
=i
;
}
}
if(ma
==0)
ma
=1;
printf("%d\n",ma
);
printf("%d",b
);
for(int i
=b
+1; i
<b
+ma
; i
++)
printf("*%d",i
);
printf("\n");
return 0;
}