PAT_A1096
PAT甲级1096.
目录
A1096
题目
样例
输入:
630
输出:
3
5*6*7
思路和坑点
直接对所有可能的连续因子进行统计,然后比较筛选出最合适的答案。考虑到对于一个非素数来说,其因子不会超过sqrt()。
坑点:
注意特判素数的情况,个数为1,因子为自己本身。
AC代码
#include<bits/stdc++.h>
using namespace std;
int main(void){
#ifdef ONLINE_JUDGE
#else
freopen("1.txt","r",stdin);
#endif
vector<int> out,temp; //使用数组保存因子,temp为临时结果,out为最终结果
int n;
cin>>n;
int sqr=(int)sqrt(1.0*n); //如果有连续因子,则因子小于等于n开根号
for(int i=2;i<=sqr;i++){
int t=n;
for(int j=i;;j++){ //从i开始获取连续的因子
if(t%j==0){
temp.push_back(j);
t/=j;
}
else break; //如果遇到不连续的则挑出循环
}
if(temp.size()>out.size()) //比较更新结果
out=temp;
temp.clear(); //temp清空,准备接受下一组结果
}
if(out.size()==0) //特判素数只有1和其自身
printf("1\n%d",n);
else{
int size=out.size(); //输出多因子的结果
printf("%d\n",size);
for(int i=0;i<size;i++){
if(i) putchar('*');
printf("%d",out[i]);
}
}
return 0;
}