test 6.1 分解质因数(5分)

每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。比如,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语言

#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;
}