本题和A1085求完美数列差不多,找连续的最大区间,且i和j的位置都不固定,用二重循环实现
#include <iostream>
#include <cmath>
using namespace std;
long int num, temp;
int main(){
cin >> num;
int first = 0, len = 0, maxn = sqrt(num) + 1;
for (int i = 2; i <= maxn; i++) {
//初始位置固定
int j;
temp = 1;
for (j = i; j <= maxn; j++) {
//向后找连续因子
temp *= j;
if (num % temp != 0) break;
}
if (j - i > len) {
len = j - i;
first = i;
}
}
if (first == 0) {
cout << 1 << endl << num; //输出最小的连续因子,是1不是n
} else {
cout << len << endl;
for (int i = 0; i < len; i++) {
cout << first + i;
if (i != len - 1) cout << '*';
}
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,first=0,maxn=0,sqr,j;
cin>>n;
sqr=(int)sqrt(n*1.0)+1; //大于sqr的因子最多有一个,如果n是素数,那就是自己,或者6=2*3,12=3*4其实是2*2*3
for(int i=2;i<=sqr;i++)
{
if(n%i==0)
{
int temp=i;
for(j=i+1;j<=sqr;j++)
{
temp*=j;
if(n%temp!=0)
break;
}
if(j-i>maxn)
{
maxn=j-i;
first=i;
}
}
}
if(first==0)
printf("1\n%d",n);
else{
printf("%d\n",maxn);
for(int i=first;i<first+maxn;i++)
{
printf("%d",i);
if(i!=first+maxn-1)
printf("*");
}
}
return 0;
}