题目描述
所谓因子分解,就是把给定的正整数a,分解成若干个素数的乘积,即 a = a1 × a2 × a3 × ... × an,并且 1 < a1 ≤ a2 ≤ a3 ≤ ... ≤ an。其中a1、a2、...、an均为素数。
先给出一个整数a,请输出分解后的因子。
输入描述:
输入包含多组数据,每组数据包含一个正整数a(2≤a≤1000000)。
输出描述:
对应每组数据,以“a = a1 * a2 * a3...”的形式输出因式分解后的结果。
输入例子:
10
18
输出例子:
10 = 2 * 5
18 = 2 * 3 * 3
#include <cstdio>
#include <vector>
using namespace std;
int primeArray[78667] = {0};
int isprime(int n)
{
int i;
for (i = 2; i*i<=n; i++)
if (n%i == 0)
return 0;
return 1;
}
void primetable()
{
int i, j = 0;
for (i = 2; i <= 1000000; i++)
if (isprime(i))
{
primeArray[j++] = i;
}
}
int main()
{
primetable();//建立素数表
int N;
while (scanf("%d",&N)!=EOF)//循环读入
{
printf("%d = ", N);
vector<int> yinzi;
for (int i = 0; i < 78667;)
{
if (N%primeArray[i]==0)
{
yinzi.push_back(primeArray[i]);//将分解的素数保存在容器中
N /= primeArray[i];
if (N == 1)
{
break;
}
}
else
{
i++;
}
}
for (int i = 0; i < yinzi.size()-1; i++)//打印结果
{
printf("%d * ", yinzi[i]);
}
printf("%d\n", yinzi[yinzi.size()-1]);
}
}