题意:找出数n的最长最小连乘子列
考虑到本题的数据规模不算大,可以采用暴力搜索的方法。
i从2循环到sqrt(n),注意这里不能写成i*i<=n,(会导致最后一个测试点无法通过,具体原因不清楚)
代码如下:
#include<bits/stdc++.h>
using namespace std;
int n;
int main() {
cin>>n;
int cnt,maxn,ed;
int tmp=n;
maxn=0;
for(int i=2;i<=sqrt(tmp);i++){
cnt=0;
int j=i;
n=tmp;
while(n%j==0){
n/=j;
j++;
cnt++;
}
if(cnt>maxn){
maxn=cnt;
ed=j-1;
}
}
if(maxn==0){
cout<<1<<endl;
cout<<n;
return 0;
}
cout<<maxn<<endl;
cout<<ed-maxn+1;
for(int i=maxn-2;i>=0;i--){
cout<<'*'<<ed-i;
}
return 0;
}