假设x是一个正整数,它的值不超过65535(即1<x<=65535),请编写一个程序,将x分解为若干个素数的乘积。
输入的第一行含一个正整数k (1<=k<=10),表示测试例的个数,后面紧接着k行,每行对应一个测试例,包含一个正整数x。
每个测试例对应一行输出,输出x的素数乘积表示式,式中的素数从小到大排列,两个素数之间用“*”表示乘法。
2 11 9828
112*2*3*3*3*7*13
AC代码如下:
#include <iostream> #include <cstdio> #include <cmath> using namespace std; int fun(int n) { int flag=1; for(int i=2;i<=sqrt(n);i++) { if(n%i==0) { flag=0; break; } } return flag; } int main() { int n; int x; int a[10000]; cin>>n; while(n--) { cin>>x; int xx=x; int num=0; int sum=1; for(int i=2;i<=x;i++) { if(x%i==0) { while(x%i==0) { a[num]=i; sum*=i; num++; x/=i; } } if(sum==xx) break; } if(num==1) { cout<<sum<<endl; continue; } for(int i=0;i<num;i++) { if(i!=num-1) cout<<a[i]<<"*"; else cout<<a[i]<<endl; } } return 0; }