2014-09-28 35 views
0

我聲明,然後分配「N」的變量「m」和「NUM」。當他們到達節目結束時,他們結束爲零。輸出變量變爲0可能的邏輯錯誤

該程序可以找到n的Phi Totient函數。這一切都完美無瑕,直到最後一個循環。

int factorization(int n) 
{ 
int i, j=0, a[14], index=0, m, num; 

    m=n; 
    num=n; 

    for(i=2; i<sqrt(n)+1; i++) 
    { 
     if(n%i == 0) 
     { 
      n=n/i; 
      if(a[0]!=i && a[1]!=i && a[2]!=i && a[3]!=i && a[4]!=i && a[5]!=i && a[6]!=i && a[! =i && a[8]!=i && a[9]!=i && a[10]!=i && a[11]!=i && a[12]!=i && a[13]!=i && a[14]!=i) 
      { 
      a[index]=i; 
      index++; 
      } 
      i=1; 
     } 
    } 
    a[index]=n; 

    for (i=index+1; i<=14; i++) 
    { 
     a[i]=0; 
    } 
    for (i=0; i<=10; i++) 
    { 
     printf("%d\n",a[i]); 
    } 

    while(a[j] != 0 && a[j] != 1) 
    { 
    m=m*((a[j]-1)/a[j]); 
    j++; 
    } 
    printf("Phi of %d = %d", num, m); 

    return 0; 
} 

回答

0

變化和循環到

while (a[j] != 0 && a[j] != 1) 
{ 
    m = m * (((double)a[j] - 1.0)/(double)a[j]); 
    j++; 
} 

如果m是當過分割

((a[j]-1)/a[j]) 

小於1它被向下舍入到零以及乘法整數成爲

m = m * 0 
0
int i, j=0, a[14], index=0, m, num; 

a陣列不被初始化而數組元素被讀入:在要測試a[14]!=i上述行

if(a[0]!=i && a[1]!=i && a[2]!=i && a[3]!=i && a[4]!=i && a[5]!=i && a[6]!=i && a[! =i && a[8]!=i && a[9]!=i && a[10]!=i && a[11]!=i && a[12]!=i && a[13]!=i && a[14]!=i) 

Morever但a的最後一個元素是a[13]a[14]不在數組中。

在相同:

for (i=index+1; i<=14; i++) 
{ 
    a[i]=0; 
} 

要訪問的陣列外部的元件(a[14])。

+0

那固定的變量'num'對我來說,但不是變量'm'。我還初始化了數組'a'的所有元素。 – 2014-09-28 00:51:11

+0

它似乎我的'米'變量變爲0一些如何計算併成爲0 ... – 2014-09-28 01:21:49