2013-03-10 60 views
0

我的工作是使用c來證明fermats理論不正確。所以我做的是嵌套循環,它很容易閱讀。C語言cygwin編譯器,不知道爲什麼會發生這種情況

這裏是代碼:

#include <stdio.h> 
#include <math.h> 

quadtest(unsigned long long int a, unsigned long long int b, unsigned long long int c, unsigned  int n) 
{ 
if ((pow(a,n)+pow(b,n))==pow(c,n)) 
    return 1; 
else 
    return 0; 

}  

main() 
{ 
unsigned long long int a; 
unsigned long long int b; 
unsigned long long int c; 
unsigned int n; 

//a=1; b=1; c=1; n=1; 
for(n=2; n<100; n++) 
{ 
printf("\nn=%d",n); 
    for(c=1; c<500; c++) 
    { 
     printf("\ntrying now c=%d and n=%d",c,n);  
     for(b=1; b<500; b++) 
     { 
      if (quadtest(a,b,c,n)) break; 
      //printf("\nb=%d, n=%d",b,n); 

     } 
     for(a=1; a<500; a++) 
     { 
      if (quadtest(a,b,c,n)) break; 
      //printf("\na=%d, n=%d",a,n); 
     } 
    } 
    printf("\nthe right values to prove fermats theory wrong are n=%d,c=%d,b=%d,a=%d",n,c,b,a); 
}  





} 

編譯後,即時得到「試圖C =隨機數,N = O N總是出於某種原因等於0,即使它永遠應該是0

IM也越來越像 「正確的價值觀,以證明費馬的理論錯爲n = 99,C = 500,b = 0,A = 500」

這再次,無論是A,b,C,或n應該是0.不知道是什麼問題

+1

是%d是無符號long long int的正確格式說明符... – 2013-03-10 20:50:37

+0

您正在使用未初始化的'a',因爲您已經註釋了初始化。 – teppic 2013-03-10 20:55:43

+0

我很確定%d是所有整數的正確初始值設定項。 – Alex 2013-03-10 21:00:54

回答

1

您的代碼有兩個明確的問題:

您定義了幾個變量,並且每個變量都被初始化,除了a。您可以使用a未初始化的方式調用函數。這是未定義的行爲,可以解釋您的問題。

其次,您在printf中使用了不正確的說明符。 %d用於int; %llu用於unsigned long long。使用錯誤的說明符可能會導致輸出錯誤的值。

+0

謝謝你的作品。 – Alex 2013-03-10 22:06:46

+0

@Alex:沒問題。你能否接受答案將它從無人問津的名單上拿下來? – teppic 2013-03-11 20:09:15

相關問題