这个题的坑比较少,有一个测试点是1 注意一下。
遇到的问题:
1 prime表使用,有时候把表中的数当成了素数了,解决方案是应该创建一个表只存素数,这样能节省不少开销,但是我懒得改了。。
2 对1进行特判,因为只有输入一的时候会输出带有1的式子,所以不能把1加入表中。
3 数字可能会比较大,注意数据类型,我为了省事全换成longlong了,这样绝对不会有事。
4对于输入的素数能判定。
ac代码
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std;
bool prime[100010]={false};
void printprime()
{
for(int i=2;i<100010;i++)
{
if(prime[i]==false)
{
for(int j=2*i;j<100010;j+=i)
{
prime[j]=true;
}
}
}
}
struct factors{
long long int num,x;
}fac[10];
int main()
{
long long int a;
printprime();
scanf("%lld",&a);
printf("%lld=",a);
if(a==1)
{
printf("1\n");
return 0;
}
long long int b=(long int)sqrt((double)a);
int n=0;
for(int i=2;i<b;i++)
{
if(prime[i]==false&&a%i==0)
{
fac[n].num=i;
for(int j=0;a%i==0;j++)
{
a/=i;
fac[n].x++;
}
n++;
}
}
if(a!=1)
{
fac[n].num=a;fac[n].x=1;
}
for(int i=0;fac[i].x!=0;i++)
{
printf("%lld",fac[i].num);
if(fac[i].x!=1)
{
printf("^%lld",fac[i].x);
}
if(fac[i+1].x!=0)
{
printf("*",fac[i].x);
}
}
printf("\n");
return 0;
}