2014-09-29 40 views
-3

C程序找到所有素數因子。例如:24將有2 2 2 3爲answer.I已經使用recursion.help我出去please.the輸出12來:2,3,4,6未如預期C程序找到所有素數因子。例如:24將有2 2 2 3作爲答案

#include <stdio.h> 

int primeno(int i) 
{ 
    int j,afg; 
    for(j=2;j<i;j++) 
    { 
     if((i%j)==0) 
      afg=0; 
    } 
    if(j==i) 
     afg=1; 
    return afg; 
} 
void prime(int num) 
{ 
    int i; 
    for(i=2;i<num;i++) 
    { 
     if(((primeno(i))==1)&&((num%i)==0)) 
      printf("%d\n",i); 
     else if((!primeno(i))&&((num%i)==0)) 
      prime(i); 
    } 
} 
int main() 
{ 
    int num; 
    printf("enter the number whose prime factors are to be found\n"); 
    scanf("%d",&num); 
    prime(num); 
    return 0; 
} 
+0

也許你可以爲了正確地格式化代碼,使其更具可讀性? – 2014-09-29 14:11:52

+1

除非我誤讀,否則您使用的算法稱爲** trial division **。你可以谷歌。另外,你應該看看C代碼風格指南。你的代碼不清楚(特別是你沒有空格),也沒有幫你找到問題。可讀代碼更易於分析和調試。 – slezica 2014-09-29 14:12:02

+1

你的代碼不會編譯(primeno隱式聲明,main的返回類型是隱式的)。如果您修復了所有編譯器錯誤和警告,我們可以嘗試構建並運行並進行調試。 – nmichaels 2014-09-29 14:13:31

回答

2

int primeno功能將始終返回1。在此函數的for循環結束時,j總是等於i。您想要執行的操作是在循環上方設置afg=1,然後刪除if語句。

+0

yeah..i在for循環中添加了一個break語句,現在可以使用 – 2014-09-29 14:21:58

1

試試這個:

void printAllPrimeFactor(int n) 
{ 
    // Print the number of 2s that divide n 
    while (n%2 == 0) 
    { 
     printf("%d ", 2); 
     n = n/2; 
    } 

    // n must be odd at this point. So we can skip one element (Note i = i +2) 
    for (int i = 3; i <= sqrt(n); i = i+2) 
    { 
     // While i divides n, print i and divide n 
     while (n%i == 0) 
     { 
      printf("%d ", i); 
      n = n/i; 
     } 
    } 

    // This condition is to handle the case whien n is a prime number 
    // greater than 2 
    if (n > 2) 
     printf ("%d ", n); 
} 


int main() 
{ 
    int n = 24; 
    printAllPrimeFactor(n); 
    return 0; 
} 

OR使用此功能:

void printAllPrimeFactors(long number) { 
     long temp = number; 
     for (int i = 2; i <= temp; i++) 
     { 
      if (temp % i == 0) 
      { 
        printf("%d ",i); // prime factor 
        temp /= i; 
        i--; 
      } 
     } 
} 
+0

您可以將'for(int i = 3; i <= sqrt(n); i = i + 2)'變爲'for = 3; n!= 1; i + = 2)'。 – mch 2014-09-29 14:32:24