Я столкнулся с этой проблемой при проверке того, находятся ли точки в конечном поле GF (13) на эллиптической кривой y^2 = x^3 + x + 1: Сначала я установил границу цикла как i < 2, результаты получились правильно.в C, почему результат отличается после изменения границы цикла?
#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<2
к i<13
,
for(i=0;i<13;i++)
первые 4 балла изменились: link 2
Это делает именно то, что предполагается. Единственной проблемой выбора nit является 'main()' is type 'int' (например,' int main (void) '), а main возвращает значение,' return 0; 'по крайней мере. –
@ DavidC.Rankin true с типом возвращаемого значения, но он имеет неявное возвращаемое значение '0', поскольку (я думаю) C99. – CoffeeandCode
Согласовано, но в зависимости от компилятора вы получите предупреждение о невозможности предоставить возврат. И никто здесь не запускает код, который генерирует любые предупреждения ... ':)' –