输出100-200之间的所以素数,这段程序为啥运行结果不对。

#include<math.h>
int prime(int m)
{int i,k,z;
k=sqrt(m);i=2;
while(i<k/2) i++;
if(k%i==0)z=1;
else z=0;
return z;}
#include<stdio.h>
int main()
{int i;int prime(int m);
for(i=100;i<200;i++)
if(prime(i))printf("%d\n",i);
return 0;
}

代码逻辑稍微有点问题,修改了一下,如下:


#include <stdio.h>
#include<math.h>
int prime(int m)
{
    int i,k,z=1;
    k=sqrt(m);
    
    i=2;
    
    while(i<=k){ //如果m能被2到m平方根 之间的数整除,说明不是素数,否则是素数 
        
        if(m%i==0)
            z=0;
        
        i++;
    }
        
        

        
    return z;
}

int main()
{
    int i;int prime(int m);
    for(i=100;i<200;i++)
        if(prime(i))printf("%d\n",i);
        
    return 0;
}

int prime(int m)
{
    int i,k,z;
    k=sqrt(m);
    i=2;
    while(i<=k)
    {
        if(m%i==0)return 0; //不是素数直接返回,不用继续算。
        i++;
    }
    return 1;
}

供参考:

int prime(int m)
{
    int i, k, z;
    k = (int)sqrt(m); i = 2;
    while (i <= k) { //while (i < k / 2) i++; 
        if (m % i == 0) return  0;    //if (k % i == 0)z = 1;
        i++;
    }          //else z = 0;
    return 1;
}