数组越界问题怎么改正

分解质因数代码。为什么说这段代码数组越界了,什么是数组越界啊,怎么改正捏

int s, s0, i, m = 1;
int a[25] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97};
scanf("%d", &s);
s0 = s;
printf("%d=", s0);
for (i = 0; a[i] <= s0; i++) {
    for (; s % a[i] == 0;) {
        s = s / a[i];
        printf("%d", a[i]);
        if (s / a[i] > 0)
            printf("*");
    }
}

你要分解质因数,那么你需要的素数表是很大的,如果输入数比较大的话,你这个方法就行不通了。
你可以看一下我这篇文章:
https://blog.csdn.net/apple_53792700/article/details/127575792?spm=1001.2014.3001.5502
里面有 利用 Bitmap 求解大数素数 的代码。
可以确定一个非常大的数是不是素数。
这样子就不存在数组越界的问题了~
有问题的话可以追问我。

看你输入的s是多少了,如果过输入的是大于等于25的数据,就会出现数组越界的情况

如果你s0数值非常大,是不是循环都满足,i++下去,肯定越界了

当s较大时,25个质数不一定满足,s 的因子超出这25个数,就出现数组越界了。改正了数组越界,求 s 的质数因子就不一定能满足了,修改如下,供参考:

    int s, s0, i, m = 1;
    int a[25] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29,
                 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97};
    scanf("%d", &s);
    s0 = s;
    printf("%d=", s0);
    for (i = 0; i < 25 && s != 0; i++) { //(i = 0; a[i] <= s0; i++)
         for (; s % a[i] == 0;)
         {
             s = s / a[i];
             printf("%d", a[i]);
             if (s / a[i] > 0)
                 printf("*");
         }
    }

贴个截图上来吧,你这个代码在这里显示错乱了