推理因子化,改变输出。

时间:2015-10-18 15:15:34

标签: c

大家好,我有这个代码。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    unsigned int num,i,j;
    int a=0;
    printf("Please input a number: ");
    scanf("%d",&num);
    printf("The Prime Factorization: ");
    for (i=2;i<=num;i++){
        if (num%i==0){
                a=1;
                if (i==num){
                printf(" %ld ",num);
                } else {
                    printf(" %ld *",i);
                    num/=i;
                }
        }


    }
    if (a==0){
            printf("%ld ",num);
    }


    return 0;
}

所以让我说我输入40, 它给了我

素数分解:2 * 4 * 5

这是正确的,但我怎么能输出“2 * 4 * 5” 为“2 ^ 3 * 5”?

2 个答案:

答案 0 :(得分:1)

由于素数在分解中可以出现不止一次,所以你不能在没有先测试当前素数的情况下继续前进到下一个候选者,直到该数字不再被它分解。

为了获得你所追求的精美打印输出,你可以保留一个计数变量,如下所示:

#include <stdio.h>

int main(void) {
    unsigned int num,i,count;
    int a=0;
    printf("Please input a number: ");
    scanf("%d",&num);
    printf("The Prime Factorization: ");
    i = 2;
    while(num>1){
        if (num%i==0){
                a=1;
                count = 1;
                num /= i;

                // Exhaust each prime fully:
                while (num%i==0) {
                    count++;
                    num /= i;
                }

                printf("%ld",i);
                if (count > 1) {
                    printf(" ^ %ld", count);
                }
                if (num > 1) {
                    printf(" * ");
                }
        }
        i++;
    }
    if (a==0){
            printf("%ld ",num);
    }


    return 0;
}

答案 1 :(得分:0)

类似的东西:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int num,i,j,count=0;
    int a=0;
    printf("Please input a number: ");
    scanf("%d",&num);
    printf("The Prime Factorization: ");
    for (i=2;i<=num;i++){
        count=0;
        a=0;
        while(num%i==0){
            a=1;
            ++count;
            num/=i;
            }
        if(a==1)
       {
            printf("%d ^ %d *",i,count);
        }
   }
   if (a==0){
        printf("%ld ",num);
}
return 0;
}