题目
pata1096
题目思路
对于任一一n,从2开始遍历,求其连续因子最大值,注意的是,若之前已有k个连续的因子相乘,只需遍历到n的1/k次方即可。
参考代码
#include<iostream>
#include<cmath>
using namespace std;
bool isprime(int a);
int main()
{
int n=0,max=0,t=0,begin=0,q=0;
cin>>n;
max=n;
if(isprime(n))
printf("1\n%d",n);
else
{
for(int i=2;i<max;i++)
{
q=n;
int l=i;
while(q%l==0)
{
q=q/l;
l++;
}
if(l-i>t)
{
t=l-i;
begin=i;
max=pow(n,1/(double)t);
}
}
printf("%d\n",t);
for(int i=0;i<t;i++)
{
printf("%d",begin+i);
if(i<t-1)
printf("*");
}
}
return 0;
}
bool isprime(int a)
{
int k=0;
k=(int)sqrt(a);
if(a<=1)
return false;
for(int i=2;i<=k;i++)
{
if(a%i==0)
return false;
}
return true;
}