描述
请你写一个程序,读如一个正整数,请找出所有质因数的连乘,例如:
2016=2^5*3^2*7^1
3888=2^4*3^5
9800=2^3*5^2*7^2
71329629=3^1*7^1*19^2*97^2
5421051804 =2^2*3^1*7^1*19^3*97^2
其中,正整数的范围是在1~5147499,若其中有两个以上的质数,则按由小而大的顺序依次印出!
输入
第一行为用例个数N(N<=100),接下N行每行只有一个正整数x(2<=x<=5147499)。
输出
用一行输出x因数分解后的表示式。
样例输入
3
2016
3888
5147499
2016
3888
5147499
样例输出
2^5*3^2*7^1
2^4*3^5
3^1*7^2*19^2*97^1
2^4*3^5
3^1*7^2*19^2*97^1
题目来源
题目上传者
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
__int64 n;
int a[1000000];
struct node
{
int x,y;
}s[1000000];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int j=0,k=0;
scanf("%I64d",&n);
memset(a,0,sizeof(a));
for(int i=2;i<=n;i++)
{
if(n%i==0)
{
n=n/i;
a[i]++;
i=i-1;
}
}
for(int i=2;i<1000000;i++)
{
if(a[i]!=0)
{
s[k].x=i;
s[k].y=a[i];
k++;
}
}
//if(k>=2)
{
printf("%d^%d",s[0].x,s[0].y);
for(int i=1;i<k;i++)
{
printf("*%d^%d",s[i].x,s[i].y);
}
}
printf("\n");
}
return 0;
}