2015-10-18 40 views
0

你好傢伙我有這個代碼。素數分解,改變輸出。

#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「?

+1

「4」是素數? ......................... –

回答

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

由於黃金可以出現比因式分解一次,你不能只是移動到下一個候選而不先進行測試現任總理,直到數不再divisble通過它。

,並獲得漂亮的打印輸出你後,你可以保持一個計數變量,如下圖所示:

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