1.这种题目写起来还是有一点麻烦的,因为特殊数据很多
2.建议先用一个p数组存素数,筛法会比较快,也就是下面代码的find函数
3.1=1要特别判断,然后就是*的输出情况,避免出现5=*5的情况
4.maxn要开的够大
#include <stdio.h>
#include <math.h>
const int maxn = 100010;
int p[maxn],len = 0; //素数数组
bool table[maxn] = {false};//false表示是素数
void Find() //筛法找素数
{
for(int i=2;i<maxn;i++){
if(table[i]==false){
p[len++] = i;
for(int j=i+i;j<maxn;j += i)table[j] = true;
}
}
}
bool isPrime(long long n)//判断是否为素数,输出的时候用
{
if(n<=1)return false;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0)return false;
}
return true;
}
int main(int argc, char const *argv[])
{
long long n;
scanf("%lld",&n);
Find(); //这句不要忘了写
//for(int i=0;i<len;i++)printf("%d ",p[i]);
printf("%lld=",n);
if(n==1)printf("1"); //1=1特别判断
else{
int flag = 0; //用来控制*的输出
for(int i=0;i<len;i++){ //遍历素数数组
int exp = 0; //指数计数
while(n%p[i]==0){
n /= p[i];
exp++;
}
if(exp){ //只要指数不为0
if(flag)printf("*");
printf("%d",p[i]);
flag = 1;
}
if(exp>=2)printf("^%d",exp);//指数大于1才输出指数
if(isPrime(n)){
if(flag)printf("*");
printf("%d",n);
break;
}
}
}
return 0;
}