FZU OJ 1075 :分解素因子

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
先打表。再用一个数组来储存素数,最后找素数里面能够整除k的素数,把这些素数储存到另一个数组中。
#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;
}
原文地址:https://www.cnblogs.com/Friends-A/p/9309025.html