L1-006 连续因子 分数 20 作者 陈越 单位 浙江大学
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数 N(1<N<231)。
输出格式:
首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1*因子2*……*因子k
的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。
输入样例:
630
输出样例:
3
5*6*7
#include<stdio.h> #include<math.h> int main() { int n = 0; scanf("%d", &n); int i = 0,j=0, a = 0, sum=0,num = 0,temp=0,qidian=0,longqidian=0; int x = sqrt(n);//这里解释一下,为什么sqrt(n),因为我们最少的因子就两个为素数,假设这个不是素数,极限求最大的两个值相乘等于该数就是开根号,所以这里是节省运行时间,防止超时 for (i = 2;i <= x;i++) { num = 0; sum = n; qidian = i; for (j = i;sum%j==0&&sum!=0;j++) { sum /= j; num++; } if (num > temp) { temp = num;//筛选最长因子个数 longqidian = qidian; } } if (temp == 0) printf("1\n%d", n); else { printf("%d\n", temp); i = longqidian; while (i < longqidian + temp) { if (i != longqidian) printf("*"); printf("%d", i); i++; } } return 0; }
标签:输出,temp,16,int,2023,longqidian,因子,printf From: https://www.cnblogs.com/wangxinyuan1108/p/17406814.html