在正整数N的所有因子中,可能存在多个连续数。例如,630可以被分解为3×5×6×7,其中5、6和7是三个连续的数字。现在给定任何一个正N,你应该找到连续因子的最大数目,并列出连续因子的最小序列。
一直有一个用例过不了,去牛客网看发现是这个用例
53448180
应该输出
3
3*4*5
就是一个数可能不能整除2*3*4但是可以整除3*4*5,换言之就是需要遍历每个位置计算以该位置为开头的连续数字串是否可以构成n的因子序列,而不是检查完234直接从5开始。(可能全网就我一个人想岔了吧)
#include <bits/stdc++.h>
#define INF 9999999
using namespace std;
const int maxn=10010;
int m,n,cnt=0,familyid=0;
int main(){
cin>>n;
int con=2,cnt=0,res=0;
while(con<sqrt(n)+1){
int temp=n,cont=0,constart=con;
while(temp%con==0){
temp=temp/con;
cont++;
con++;
}
if(cont>cnt){
res=con;
cnt=cont;
}
con=constart+1;
}
if(cnt==0){
printf("1\n%d",n);
return 0;
}
printf("%d\n",cnt);
for(int i=cnt;i>0;i--){
printf("%d",res-i);
if(i>1)printf("*");
}
}
本文探讨了一个数学问题,即如何找出正整数N的所有因子中连续数的最大数目,并列举连续因子的最小序列。通过一个具体的例子解释了算法实现,强调了在检查连续因子时需要遍历每个位置的重要性。
636

被折叠的 条评论
为什么被折叠?



