pat A1096
题意:
输入:
1.输入n
输出:
1.先输出最大连续因子的个数 2.依次连续输出最小的连续因子
解题思路:
参考代码:
#include<iostream>
#include<cmath>
typedef long long LL
;
using namespace std
;
int main()
{
LL n
;
cin
>> n
;
LL sqr
=(LL
)sqrt(1.0*n
),ansI
=0,ansLen
=0;
for(LL i
=2; i
<=sqr
; i
++)
{
LL temp
=1,j
=i
;
while(1)
{
temp
*=j
;
if(n
%temp
!=0)
break;
if(j
-i
+1>ansLen
)
{
ansI
=i
;
ansLen
=j
-i
+1;
}
j
++;
}
}
if(ansLen
==0)
{
printf("1\n%lld",n
);
}
else
{
printf("%lld\n",ansLen
);
for(LL i
=0; i
<ansLen
; i
++)
{
printf("%lld",ansI
+i
);
if(i
<ansLen
-1)
cout
<< "*";
}
}
return 0;
}
注意事项:
注意对于能开平方的数字,也要能输出其因子,也就是i<=sqr
for(LL i
=2; i
<=sqr
; i
++)
对于素数,就输出自身,连续因子长度为0;对于能开平方的数,输出其开平方,长度为1;对于质因子的幂次方,则输出该质因子,长度为1…