分解问题
描写叙述
请你写一个程序,读如一个正整数。请找出全部质因数的连乘,比如:
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; }
版权声明:本文博主原创文章,博客,未经同意不得转载。