第一次:25分钟
测试点3:特殊值1
#include<stdio.h>
const int maxn = 1000;
int p[maxn]= {2},i=1,curN=3;
struct factor {
int x;
int cnt;
} fac[maxn];
int j=0;
int main() {
long long N;
scanf("%lld",&N);
printf("%lld=",N);
if(N==1) {
printf("1");
return 0;
}
while(N>1) {
if(N%p[i-1]==0) {//当前质数是质因子
fac[j].x=p[i-1];
fac[j].cnt=0;
while(N%p[i-1]==0) {
++fac[j].cnt;
N/=p[i-1];
}
++j;
} else { //当前质数不是质因子 ,找下个素数
bool isFind = false;
while(isFind==false) {
bool isP = true;
for(int k=0; k<i && p[k]*p[k]<curN; ++k)
if(curN%p[k]==0) {
isP=false;
break;
}
if(isP) {
isFind=true;
p[i++]=curN;
}
curN+=2;
}
}
}
for(int k=0; k<j; ++k) {
if(k) printf("*");
printf("%d",fac[k].x);
if(fac[k].cnt>1)
printf("^%d",fac[k].cnt);
}
return 0;
}