代码
#include<bits/stdc++.h>
using namespace std;
int isSu(int a)
{
if(a==1)
return 0;
else
{
int sqr = (int)sqrt(a*1.0);
for(int i = 2; i<=sqr; i++)
{
if(a%i==0)
return 0;
}
}
return 1;
}
int su[100010]= {0};
void FindSu()
{
for(int i=1; i<100010; i++)
{
if(isSu(i))
su[i]=1;
else
su[i]=0;
}
}
struct Fa
{
int num;
int x;
} Fa[10];
int main()
{
int n ;
FindSu();
scanf("%d",&n);
int d = n;
int Fanum=0;
if(n==1)
{
printf("1=1\n");
}
else
{
int sqr = (int)sqrt(1.0*n);
for(int i=2; i<=sqr; i++)
{
if(su[i]==1)
{
if(n%i==0)
{
int num=0;
while(n%i==0)
{
++num;
n/=i;
}
Fa[Fanum].x = i;
Fa[Fanum].num=num;
++Fanum;
}
}
if(n==1)
break;
}
if(n!=1)
{
Fa[Fanum].x=n;
Fa[Fanum].num=1;
Fanum++;
}
}
if(d!=1)
{
printf("%d=",d);
int first=1;
for(int i = 0; i<Fanum; i++)
{
if(first)
{
printf("%d",Fa[i].x);
if(Fa[i].num!=1)
printf("^%d",Fa[i].num);
first = 0;
}
else
{
printf("*%d",Fa[i].x);
if(Fa[i].num!=1)
printf("^%d",Fa[i].num);
}
}
printf("\n");
}
return 0;
}
心得
素数打表开 100010 差不多够了
求到sqrt 一半就可以
注意这一段
if(n!=1)
{
Fa[Fanum].x=n;
Fa[Fanum].num=1;
Fanum++;
}