2015-10-16 81 views
-1

我在驗證有限域GF(13)中的點是否在橢圓曲線y^2 = x^3 + x + 1上時遇到了這個問題:首先我將環路邊界設置爲i < 2,結果出來了對。,爲什麼僅在改變循環邊界後結果不同?

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

void main() 
{ 
    int a[13], b[13]; 
    int j, i, m, k = 0; 
    for (i = 0; i < 2; i++) 
     for (j = 0; j < 13; j++) 
      if ((i * i * i + i + 1) % 13 == (j * j) % 13) { 
       a[k] = i; 
       b[k] = j; 
       k++; 
      } 
    printf ("\n There are %d points on the curve\nThe points are: ", k); 
    for (m = 0; m < k; m++) 
     printf ("\nx=%d,y=%d \n", a[m], b[m]); 
} 

結果是link 1

後,我改變i<2i<13

for(i=0;i<13;i++) 

第4點改變:link 2

+1

它正在做它應該做的。唯一的挑剔問題是'main()'是類型'int'(例如'int main(void)'),main至少會返回一個值'return 0;'。 –

+0

@ DavidC.Rankin與返回類型一樣正確,但是因爲(我認爲)C99,它的隱式返回值爲'0'。 – CoffeeandCode

+1

同意,但取決於編譯器,您將收到未能提供回報的警告。這裏沒有人運行產生任何警告的代碼......':)' –

回答

2

您正在進入undefined behavior。如果你在循環中設置了一箇中斷,你會注意到k> = 13,這超出了你的數組邊界。

您可以添加一些邊界檢查並考慮數組的大小。

相關問題