Problem 1075 分解素因子
Accept: 1477 Submit: 2793
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
2119828
Sample Output
112*2*3*3*3*7*13
Source
FJNU Preliminary 2005
#include<stdio.h>
#define MAXN 65537
bool u[MAXN];//0为素数,
int su[MAXN];//存所有素数
void oula(){
int num=0;
for(int i=2;i<MAXN;i++){
if(!u[i])
su[num++]=i;
for(int j=0;j<num;j++){
if(i*su[j]>=MAXN) break;
u[i*su[j]]=1;
if(i%su[j]==0) break;
}
}
}
int main(){
int T,M;
oula();
scanf("%d",&T);
while(T--){
scanf("%d",&M);
int k=0,num=0;
while(su[k]<=M){
if(M%su[k]==0) {
if(!num)
printf("%d",su[k]);
if(num)
printf("*%d",su[k]);
num++;
M/=su[k];
}else{
k++;
}
}
printf("\n");
}
return 0;
}
先使用欧拉筛法选出素数,再去除就好了