这道题求符合条件的区间的最大的长度是多少,所以我们可以采用滑动窗口的方法,若(N%窗口中数的累乘==0)则说明该窗口可以保持。
注意质数的情况下输出:
1
N
代码如下:
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
int main(){
int N;
scanf("%d",&N);
int sqrtN=(int)sqrt(N);
int left=2,right=2;
int ans=0;
int partMul=1;
int leftIndex=0,rightIndex=0;
while(right<=sqrtN){
partMul*=right;
if(N%partMul!=0){
partMul/=left;
left++;
}
right++;
if(right-left>ans){
ans=right-left;
leftIndex=left;
rightIndex=right;
}
}
if(ans==0){
printf("1\n");
printf("%d",N);
}else{
printf("%d\n",ans);
for(int i=leftIndex;i<rightIndex;i++){
printf("%d",i);
if(i<rightIndex-1)printf("*");
}
}
}