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
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. –
@ DavidC.Rankin vrai avec le type de retour, mais il a eu la valeur de retour implicite de «0» depuis (je pense) C99. – CoffeeandCode
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 ... ':)' –