连续因子

    科技2026-01-19  13

    #include<stdio.h> #include<math.h> int main(void) { int N, m; long long int sum; scanf("%d", &N); m = sqrt(N); for (int i = 11; i >= 1; i--) //i控制因子的个数,即连续相乘的个数 { for (int j = 2; j <= m ; j++) //j控制从起始因子,从第几个因子开始乘i个因子 { sum = 1; for (int k = j; k <= j + i - 1; k++) //相乘各个因子 { sum *= k; if (sum > N) break; } if (N % sum == 0) //找到可以整除的连续因子输出 { printf("%d\n", i); for (int u = 1;u <= i; u++) { printf("%d",j + u - 1); if (u != i) printf("*"); } return 0; } } } printf("1\n%d", N); //质子输出 }

    在解析连续因子时,要注意质数,不然会答案错误。

    上述代码使用的是暴力尝试因子的方法。 2的31次方,大概是12的阶乘和13的阶乘之间,所以最大可以是12个数的相乘,1除外,所以是最大11个数相乘。

    分析:

    根据N的值的取值范围小于等于2的31次方,而这个值介于12的阶乘到13的阶乘之间,所以我们可以得到最大的值应该是12个数连续相乘,又因为1不计算在内,所以最多只要有11为连续因子即可。

    采用暴力的思想,我们让他分别从2、3、4…sqrt(N)开始乘,连着乘11位、10位…1位。

    即连续乘11位时分别为:

    2 3 4 5 6 7 8 9 10 11 12相乘

    3 4 5 6 7 8 9 10 11 12 13相乘

    连续乘10位时分别为:

    2 3 4 5 6 7 8 9 10 11相乘

    3 4 5 6 7 8 9 10 11 12相乘

    Processed: 0.012, SQL: 9