就是找个地方写复习笔记(:
pta
(1)2~sqrt(x)+1:找到所有因子
(2)筛选 连续 因子
第一个if筛选连续,第二个筛选因子;
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N];
int main()
{
int x,j=0;
cin>>x;
for(int i=2;i<sqrt(x)+1;i++){
if(x%i==0){
a[j++]=i;
}
}
if(j==0) a[j++]=x; //先把所有因子找到
int sum=1,y=1,max=1,z=0;//sum记录当前的所有连续因子乘积
for(int i=0;i<j;i++){
sum=a[i];
y=1;
for(int k=i+1;k<j;k++){
if(a[k]==a[k-1]+1){
sum*=a[k];
if(x%sum==0){//sum乘积是x的因子(未超
y++;
if(y>max) max=y,z=i;//y是当前连续因子个数 更新max为y z记录当前数组位置
}else break;//不是因子跳出
}
else break;//不连续跳出
}
}
cout<<max<<endl;//共有max个在a数组中以z开头的连续因子
for(int i=z;i<z+max;i++){
if(i==z) cout<<a[i];
else cout<<"*"<<a[i];
}
return 0;
}