为什么在别的平台上能输出正确结果,在pta上就显示编程错误,求解

img

img


为什么在别的平台上能输出正确结果,在pta上就显示编程错误,求解

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;
 }

img

img

img


是不是没有按题目要求呀