L1-006 连续因子
思路
初看这道题的时候就很懵逼,自己也不会写,就去看了大佬的代码,刚看的时候还不是十分理解。然后自己慢慢想总算想明白了。
1.由输入格式N在0到2^31, 在12和13的阶乘之间,所以连续因子最多为12个数相乘
2.由输出1不算在内,则连续因子的判断从2开始
3.还有一点连续因子第一个数必须要小于 sqrt(n)
4.连续因子相乘后,然后进行判定,若能被整除,则输出,若不能,则进入for循环改变起点,从新进入判定
5.如果输入的数为质数,则直接输出。
源码
#include<stdio.h>
#include<math.h>
int main() {
int n;
scanf("%d", &n);
int max = sqrt(n);
for(int len = 12; len >= 1; len--) { //连续因子的个数
for(int start = 2; start <= max; start++) { //连续因子的起点
long long int ans = 1;
for(int i = start; i <= len - 1 + start ; i++) //连续因子相乘 刚开始从2到13 然后再从3到14
ans *= i;
if(n % ans == 0) { //进行连续因子的判定,若能被整除,则输出,若不能,则重新进行连续因子的相乘
printf("%d\n%d", len, start);
for(int i = start + 1; i <= len - 1 + start ; i++)
printf("*%d", i);
return 0;
}
}
}
printf("1\n%d", n); //若输入的数是质数,则直接输出
return 0;
}