L1-006. 连续因子
L1-006. 连续因子
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越
一个正整数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
分析:题目告诉我们N小于2的31次方,联想到阶乘,使用我们可以确定最大的因子个数不会超过12个,且所有因子的大小肯定不会超过sqrt(N),
所以我们就假设最大因子长度为12,11,10.......,1的时候从2到sqrt(N),看看最后得到出来的阶乘数字是不是N的因子,如果是,那么我们就找到啦,
我觉得我没有说清楚,我也不知道大家有疑惑的话可以看看我的代码
ps:找到的最长因子序列的乘积一定是N的因子
当N为素数的时候,最长因子序列长度为1,序列为其本身
这是两个需要注意的地方
具体请参考这个小姐姐的博客:http://blog.csdn.net/liuchuo/article/details/51989000
这题写了两个小时,发现还是小姐姐这个方法比较好。。。。
具体代码:
1 #include<stdio.h> 2 #include<math.h> 3 #include<string.h> 4 int fun(int n)//判断素数 5 { 6 int i; 7 for(i=2;i<=sqrt(n);i++) 8 { 9 if(n%i==0) 10 { 11 return 0; 12 } 13 } 14 return 1; 15 } 16 int main() 17 { 18 int n,start,len,max,i,flag=0; 19 while(~scanf("%d",&n)) 20 { 21 flag=0; 22 if(fun(n)==1) 23 { 24 printf("1\n%d",n); 25 continue; 26 } 27 max=(int)(sqrt(n)); 28 for(len=12;len>=1;len--)//根据因子序列的长度来循环 29 { 30 for(start=2;start<=max;start++)//所有因子的大小肯定小于sqrt(n) 31 { 32 long long int ans=1; 33 for(i=start;i<=len+start-1;i++) 34 { 35 ans=ans*i;//得到这个序列的乘积 36 } 37 if(n%ans==0)//如果这个乘积是n的因子,那么这个序列就是我要找的序列 38 { 39 printf("%d\n",len); 40 for(i=start;i<=len+start-1;i++) 41 { 42 printf("%d",i); 43 if(i!=len+start-1) 44 { 45 printf("*"); 46 } 47 else 48 { 49 printf("\n"); 50 } 51 } 52 flag=1;//找到目标序列的标志 53 break; 54 } 55 } 56 if(flag==1)//找到了目标序列,跳出循环 57 break; 58 } 59 } 60 return 0; 61 }
心之所向,素履以往
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南