用long long加上%I64d就错了,改成普通整型又对了,水题也懒得管了。解体的关键在于下面的:
用暴力破解,一个个地尝试呀~既然是递增连续的因子长度~那么肯定是不重复的几个连着的数字相乘咯~然后就想到了阶乘的概念对不对~~首先题目说了n最大就2的31次方,后来发现2的31次方是介于12的阶乘和13的阶乘之间的大小的,也就是说。所求连续因子的长度再怎么长~也长不过12个数字~那就从len=12开始,一直到len=1,看看能不能找到一个满足条件的序列咯~
#include <iostream>
#include <stdio.h>
#include <map>
#include <math.h>
#include <string.h>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
#define maxn 100111
int main()
{
int i,j,len;
int n;
scanf("%d",&n);
j=sqrt(n);
long long ans=1;
for(len=12;len>=1;len--)
{
//ans = 1;
for(int start=2;start<j-len+1;start++)
{
ans = 1;
for(i=0;i<len;i++)
ans*=(start+i);
if(n%ans==0)
{
printf("%d\n%d",len,start);
//printf("%d",start);
for(i=start+1;i<start+len;i++)
printf("*%d",i);
//printf("%d",start+i);
return 0;
}
}
}
printf("1\n%d",n);
return 0;
}