Prime因子以乘法格式显示

时间:2018-06-14 02:02:20

标签: c function prime-factoring

这是一项作业,所以我只是在我的代码下方发布问题详细信息,这样你们就可以比我自己解释问题更容易了。

Q)任何大于1的整数都是素数,或者可以通过将素数相乘来制作。例如:16 = 2 x 2 x 2 x 2 =(2 ^ 4)17 =(17 ^ 1)18 = 2 x 3 x 3 =(2 ^ 1)x(3 ^ 2)写一个C程序,primeFactor .c,它要求用户输入大于1的整数,并显示其主要因子的乘积。

示例交互如下:

输入有效数字(> 1):18

18 = 1×(2 ^ 1)×(3 ^ 3)

输入有效数字(> 1):0

号码无效。

输入有效数字(> 1):19

19 = 1 x(19 ^ 1)

int readNum(int num)
{
    if (num <= 1)
    {
        return printf("Invalid Number.");
    }
    else
    {
        return printf("%i = ", num);
    }
}

int pcount = 0;
bool isPrime(int prime)
{
    bool p_flag = false;

    for(int i = 2; i < prime; i++)
    {
        if(prime % i == 0)
        {
            pcount += 1;
        }
    }
    if (pcount > 0)
    {
        p_flag = false;
    }
    else if (pcount == 0)
    {
        p_flag = true;
    }

    return p_flag;
}

int findPrimeCount(int num, int prime)
{
    int freq = 1;

    printf("1 ");
    for(prime = 2; prime < num; prime++)
    {
        freq = 1;
        while((num % prime) == 0)
        {
            printf(" * (%i ^ %i)", prime, freq);
            num = num / prime;
            freq++;
        }
    }

    if(num != 1)
    {
        printf(" * (%i ^ 1)", num);
    }

    return num;
}

int main(void)
{
    int number = 0;

    printf("Enter a valid number (>1): ");
    scanf("%i", &number);

    readNum(number);

    if(isPrime(number) == 1)
    {
        printf("1 * (%i ^ 1)", number);
    }
    else if (isPrime(number) == 0)
    {
        findPrimeCount(number, 2);
    }

    return 0;
}

现在我想我陷入困境,如果我输入数字64,输出将是:

64 = 1 *(2 ^ 1)*(2 ^ 2)*(2 ^ 3)*(2 ^ 4)*(2 ^ 5)*(2 ^ 6)

我希望输出只是:

64 = 1 *(2 ^ 6)

我不确定在此之前我是如何截断字符串输出的,或者甚至可能完全避免将整个事情打印出来。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

findPrimeCount函数中,只需将print语句放在while循环之外,这样它就只会打印factor^highestFreq

int findPrimeCount(int num, int prime)
{
    int freq = 1;

    printf("1 ");
    for(prime = 2; prime < num; prime++)
    {
        freq = 1;
        while((num % prime) == 0)
        {

            num = num / prime;
            freq++;
        }
        // only print the last iteration
        // subtract 1 to frequency to equalize
        // the last freq++.
        freq--;
        // filter out num^0
        if(freq > 0)
        {
            printf(" * (%i ^ %i)", prime, freq);
        }
    }

    if(num != 1)
    {
        printf(" * (%i ^ 1)", num);
    }

    return num;
}

输入= 64输出:

64 = 1  * (2 ^ 6)

input = 46输出:

46 = 1  * (2 ^ 1) * (23 ^ 1)