这个求n以内素数和的程序为什么j<=i/2(关键词-for)

#include <stdio.h>
int main()
{
int n,i,j,sum,limit;

    printf("Enter n:");
    scanf("%d", &n);
    sum = 0;
    limit = 0;****
    for (i = 2; i <=n; i++) {
        limit = 0;
        for (j = 2; j <=(i/2); j++) {
            if (i % j == 0) {
                limit = 1;
            }
        }
        if (limit == 0) {
            sum = sum + i;
        }
    }
    printf("sum(n)=%d", sum);

    return 0;
}

j<=i/2就够了啊,甚至这个还浪费了,只需要j<=sqrt(i)
因为判断一个数n是否为素数,逻辑是判断n是否是从2到n-1这些数中任何一个数的倍数,即求余是否为0
但更细致的判断可以知道,n不可能是大于n/2的倍数的,所以判断到i<=n/2就够了
更细致一点,j<=sqrt(i)就够了,比如16,判断到4就可以了,不需要到8,因为4*4=16,5以上不需要判断,因为另一个因子肯定会小于4,那么之前已经判断过了