j==n那里错了,因为判断素数那个for循环的结束条件是 j<sqrt(n),即用2到sqrt(n)之间的正整数来整除n,来判断n是否为素数,所以j最大为(int)sqrt(n)+1,所以使用j==n不对,改为j>(int)(sqrt(n)就可以了,或者直接return 1也可以,然后针对小于2的情况也作个判断。
修改如下:
#include <stdio.h>
#include <math.h>
int IsPrime(int n){
int j=0;
if(n<2){
return 0;
}
for(j=2;j<=(int)sqrt(n);j++){
// printf("j=%d\n",j);
if(n%j==0){
return 0;
}
}
//printf("j=%d\n",j);
if(j>(int)(sqrt(n))){
return 1;
}
}
int main(void){
int i=0;
scanf("%d",&i);
if(IsPrime(i)==1){
printf("%d is prime number.",i);
}else if(IsPrime(i)==0){
printf("%d is not prime number.",i);
}
return 0;
}