这个题目要输出某个数字分解的所有可能分解方式中,最长的一个连续因子列 如630=3*5*6*7 其中5*6*7是一个连续因子列
算法分析:1.不可以用质因子分解的方法,那样找连续因子会太麻烦,选用遍历法找因子
2.遍历时,应使用二重循环,第一重选择因子串的第一个因子,第二个循环选择后续的连续因子,不要被实例的因子列分解误导了,从3开始的因子列,发现4不是下一个因子,直接下轮循环,到从5开始时,即能找出5*6*7
这个列,肯定不会漏解,同时提高了效率
3.遍历完所有可能因子后如果发现该数字无因子,是质数,那么注意输出这个数字本身,这个要求在初始化的时候做合适的初始
#include<stdio.h>
#include<math.h>
int main() {
long int t, n;
int count = 0;//记录串长度
int max = 0;
long int beg = 0, end = 0, tbeg = 0;//记录保存的数组头,尾,临时头
scanf("%ld", &t);
n = t;
for (long int i = 2;i <= sqrt(t);i++) {//这里还有一个思路是每次进看这个数字是不是能整除n,不是的话就换下一个数字了
n = t;
for (int j = i;j <= n && n%j == 0;j++) {//这句应该是用while实现,主要是靠n%j==0开控制循环次数的
n = n / j;
count++;
if (count == 1) {//新串
tbeg = j;
}
if (count > max) {//该改序号了
max = count;
beg = tbeg;
if (n % (j + 1) != 0) {//下一个不等零了
end = j;
count = 0;//重新计数
}
}
else if (n % (j + 1) != 0) {
count = 0;
break;
}
}
}
printf("%ld\n", end - beg + 1);
for (long int i = beg;i <= end;i++) {
printf("%ld", i);
if (i != end) {
printf("*");
}
}
return 0;
}