每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。比如,6可以被分解为2x3,而24可以被分解为2x2x2x3。

题目内容

每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。比如,6可以被分解为2x3,而24可以被分解为2x2x2x3。

现在,你的程序要读入一个[2,100000]范围内的整数,然后输出它的质因数分解式;当读到的就是素数时,输出它本身。

提示:可以用一个函数来判断某数是否是素数。

输入格式

一个整数,范围在[2,100000]内。

输出格式

形如:
n=axbxcxd

n=n
所有的符号之间都没有空格,x是小写字母x。abcd这样的数字一定是从小到大排列的。

输入样例

18

输出样例

18=2x3x3

限制

时间限制:500ms 内存限制:32000kb

代码实现

C语言

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include<stdio.h>
#include<math.h>

//寻找并返回最小质因数,没有则返回0
int isMinPreme(int n)
{
int tmp = 0;
for (int MinPreme = 2; MinPreme < sqrt(n) + 1; MinPreme++)
{
if (n % MinPreme == 0)
{
tmp = MinPreme;
break; //找到最小质因数立即跳出循环
}
}
return tmp;
}

//短除法,除以最小质因数并打印,返回商
int getQuotient(int n)
{
int tmp = 0;

int MinPreme = isMinPreme(n);
//如果输入已经是2,已进行到最后一步,立即打印。
if (n == 2)
{
printf("%d", n);
}
//短除并输出
else if (MinPreme > 0)
{
printf("%dx", MinPreme);
n /= MinPreme;
tmp = n;
}
// 最小质因数为n本身
else
{
printf("%d", n);
}

return tmp;
}

int main()
{
int n = 0;
scanf("%d", &n);

printf("%d=", n);
// 不断短除获得商,直到n=2
while (n > 1)
{
n = getQuotient(n);
}

return 0;
}