2015-10-16 1 views
-1

J'ai rencontré ce problème en vérifiant si les points dans un corps fini GF (13) est sur la courbe elliptique y^2 = x^3 + x + 1: d'abord j'ai fixé la limite de boucle comme < 2, les résultats sont sortis droite.en C, pourquoi le résultat est différent après seulement changer la limite de la boucle?

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

Le résultat est link 1

après que je change les i<2 à i<13,

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

les 4 premiers points de changé: link 2

+1

Il fait exactement ce qu'il est censé faire. Le seul problème est que 'main()' est de type 'int' (par exemple' int main (void) ') et que main retourne une valeur,' return 0; 'au moins. –

+0

@ DavidC.Rankin vrai avec le type de retour, mais il a eu la valeur de retour implicite de «0» depuis (je pense) C99. – CoffeeandCode

+1

D'accord, mais selon le compilateur, vous recevrez un avertissement pour avoir omis de fournir le retour. Et personne ici n'exécute de code qui génère des avertissements ... ':)' –

Répondre

2

Vous entrez undefined behavior. Si vous définissez une pause dans la boucle, vous remarquerez que k> = 13 qui est en dehors des limites de vos tableaux.

Vous pouvez ajouter certaines vérifications de limites et tenir compte de la taille de vos baies.