直接搜索因子。注意题干要求因子的乘积不大于n。输出最小的乘积的因子,即 如果没有连续的因数,那么输出最小的那个因数。
代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<map>
#include<string>
#include<algorithm>
using namespace std;
typedef long long ll;
ll ans;
ll cnt=0;
ll help(ll left,ll bas,ll len)
{
// printf("%lld %lld %lld\n",left,bas,len);
if(left%bas==0)
{
return help(left/bas,bas+1,len+1);
}
else
{
return len;
}
}
int main()
{
ll n;
while(scanf("%lld",&n)!=EOF)
{
cnt=1;
ans=n;
for(ll i=2;i<sqrt(n);i++ )
{
if(n%i)
continue;
ll tmp=help(n,i,0);
if(tmp>cnt)
{
ans=i;
cnt=tmp;
}
}
if(cnt==0)
{
printf("1\n%lld\n",n);
return 0;
}
printf("%lld\n",cnt);
for(ll i=ans;i<ans+cnt;i++)
{
if(i!=ans)
printf("*");
printf("%lld",i);
}
puts("");
}
return 0;
}