7-7 连续因子 (20 分)
题目如你的屏幕所见
我知道你现在可能遇到了些困难,没关系,继续看下去,相信你一定看得明白
输入样例:
630
输出样例:
3
5*6*7
代码如下:
#include<stdlib.h>
#include<math.h>
int main() {
int n,i,j,first=0,max_length=0,fact,f=0,length=0;
scanf("%d",&n);
for(i=2; i<=sqrt(n); i++) { //必须要开方,不然会运算超时
fact=1;
length=0;
f=i;
for(j=i; n%j==0&&n%(fact*j)==0; j++) {
length++;
fact=fact*j;
}
//找头和ml
if(length>max_length) {
first=f;
max_length=length;
}
}
//打印输出
//printf("f=%d first=%d\n",f,first);
if(max_length==0)
printf("%d\n%d\n",1,n);
else {
printf("%d\n",max_length);
for(i=first; i<first+max_length-1; i++) {
printf("%d*",i);
}
printf("%d\n",i);
}
return 0;
}
思路解析:
1、以630=3*5*6*7为例,因子“3”不是最关键,重点是输出5*6*7;
2、如上图所示,此代码由3段组成:
(1)遍历因子,满足n%当下的因子==0;
(2)找到最大长度,并赋值,注意这个if是放在第二个for循环的外面;
(3)打印输出