c语言素数输出达不到预期效果

为什么达不到预期效果呢,我想要输出2-100的所有素数

#include 
#include 
#include 
int main()
{
    int i = 0;
    int n = 0;
    int k = 0;
    int leap = 1;
    for(i = 3; i<100; i++)
    {
        k = (int)sqrt(i);
        for(n=2; n<=k; n++)
        {
            if(k%n==0)
            {
//                leap = 0;
                break;
            }
        
        }
            if(n>k)
                printf("%d ", i);
//        leap = 1;
    }
    return 0;
}

不知道为什么
用的dev c++

改动处见注释,供参考:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
    int i = 0;
    int n = 0;
    int k = 0;
    int leap = 1;
    for(i = 2; i<100; i++)//or(i = 3; i<100; i++)修改
    {
        k = (int)sqrt(i);
        for(n=2; n<=k; n++)
        {
            if(i%n==0)  //if(k%n==0)修改
            {
//leap = 0;
                break;
            }
        }
        if(n > k)
            printf("%d ", i);
//leap = 1;
    }
    return 0;
}

该回答引用ChatGPT

这个程序中,我们首先输出2,然后从3开始循环,每次增加2。在内层循环中,我们检查当前数字是否可以被前面的奇数整除,如果可以,说明当前数字不是素数,直接跳出循环。如果当前数字无法被前面的奇数整除,则说明它是素数,输出并继续循环。

注意,在判断是否可以被前面的奇数整除时,我们只需要检查到当前数字的平方根即可,因为如果当前数字有大于平方根的因数,那么一定存在一个小于平方根的因数

#include <stdio.h>

int main() {
    int i, j, flag;
    printf("2 ");
    for (i = 3; i <= 100; i += 2) {  // 从3开始,每次增加2,因为偶数不可能为素数
        flag = 1;
        for (j = 3; j < i; j += 2) {  // 从3开始,每次增加2,因为偶数不可能为素数
            if (i % j == 0) {
                flag = 0;
                break;
            }
        }
        if (flag) {
            printf("%d ", i);
        }
    }
    return 0;
}