Problem 1075 分解素因子
Accept: 2161 Submit: 4126
Time Limit: 1000 mSec Memory Limit : 32768 KB
Problem Description
假设x是一个正整数,它的值不超过65535(即1<x<=65535),请编写一个程序,将x分解为若干个素数的乘积。
Input
输入的第一行含一个正整数k (1<=k<=10),表示测试例的个数,后面紧接着k行,每行对应一个测试例,包含一个正整数x。
Output
每个测试例对应一行输出,输出x的素数乘积表示式,式中的素数从小到大排列,两个素数之间用“*”表示乘法。
Sample Input
2
11
9828
Sample Output
11
2*2*3*3*3*7*13
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#define ll long long
using namespace std;
const int maxn=1e6+10;
int a[maxn];
int b[maxn];
int c[maxn];
int main()
{
int k,x;
int i,j,K;
memset(a,0,sizeof(a));
//打表
a[0]=a[1]=1;
for(i=2;i<=65540;i++)
{
if(a[i]==0)
{
for(j=2;j*i<=65540;j++)
{
a[i*j]=1;
}
}
}
//将素数储存到数组b中
int p=0;
for(j=0;j<=65540;j++)
{
if(a[j]==0) b[p++]=j;
}
scanf("%d",&k);
while(k--)
{
memset(c,0,sizeof(c));
int sum=0;
scanf("%d",&x);
int ss;
for(ss=0;ss<p;)
{
if(x==0) break;
//寻找整除x的素数
else if(x%b[ss]==0)
{
c[sum++]=b[ss];
x/=b[ss];
continue;
}
else if(x%b[ss]!=0) ss++;
}
K=sum;
for(i=0;i<K;i++)
{
if(i!=0) printf("*");
printf("%d",c[i]);
}
printf("
");
}
return 0;
}