时间限制内存限制出题人
1 Second 512 Mb
题目描述
给出一个正整数将其质因数分解的结果按照标准格式打印出来
输入
一个正整数T。代表有T组数据(T 10)
每组数据有一个非负整数n ( 0 n 1000000)。
输出
若n能进行因式分解则按照标准格式讲质因数分解的结果打印出来,否则输出n。每组数据需要
换行。
输入样例
5
0
1
2
4
10
输出样例
0
1
2=2^1
4=2^2
10=2^1*5^1
解题思路:质因数分解(类似素数打表的方法),求出n的质因子,之后让n分别对他的质因子作商并记录作商的次数。
#include <cstdio>
#include <algorithm>
#include <map>
#include <cstring>
using namespace std;
typedef long long ll;
const int maxn = 1e6+10;
int prim[maxn];
int ann[maxn];
int k=0;
void get_prim(int x)
{
memset(prim,0,sizeof(prim));
memset(ann,0,sizeof(ann));
k=0;
for(int i=2;i*i<=x;i++)
{
if(x%i==0)
{
while (x%i==0)
{
prim[k]=i;
ann[k]++;
x/=i;
}
k++;
}
}
if(x!=1)
{
prim[k]=x;
ann[k]++;
k++;
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
ll n;
scanf("%lld",&n);
if(n==0||n==1)
printf("%d\n",n);
else
{
get_prim(n);
printf("%d=",n);
for(int i=0;i<k-1;i++)
{
printf("%d^%d*",prim[i],ann[i]);
}
printf("%d^%d\n",prim[k-1],ann[k-1]);
}
}
return 0;
}