在 C 中,为什么仅更改循环边界后结果就不同?
in C ,why result is different after only changing loop boundary?
我在验证有限域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<2
更改为 i<13
之后,
for(i=0;i<13;i++)
前4点变化:link 2
您正在输入 undefined behavior。如果在循环内设置中断,您会注意到 k >= 13 超出了数组的范围。
您可以添加一些边界检查并考虑数组的大小。
我在验证有限域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<2
更改为 i<13
之后,
for(i=0;i<13;i++)
前4点变化:link 2
您正在输入 undefined behavior。如果在循环内设置中断,您会注意到 k >= 13 超出了数组的范围。
您可以添加一些边界检查并考虑数组的大小。