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

结果是链接1

在我更改i<2为之后i<13

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

前 4 点已更改:链接 2

4

1 回答 1

2

您正在输入未定义的行为。如果在循环内设置中断,您会注意到 k >= 13 超出了数组的范围。

您可以添加一些边界检查并考虑数组的大小。

于 2015-10-16T04:03:19.560 回答