pta 判断一个整数是否为素数错误求解

7-46 判断一个整数是否为素数 (15 分)
本题要求编写程序,判断一个给定的整数是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。

输入格式:
输入在一行中给出一个需要判断的整数 M(−2
31
≤M≤2
31
−1)。

输出格式:
如果M是素数,则在一行中输出Yes,否则输出No。如果输入了非正整数,也要输出No。

输入样例1:
11
结尾无空行
输出样例1:
Yes
结尾无空行
输入样例2:
9
结尾无空行
输出样例2:
No
结尾无空行
输入样例3:
-2
结尾无空行
输出样例3:
No
结尾无空行

#include <stdio.h>
#include <math.h>
int main(){
int M,i;
scanf("%d",&M);

if(M==1 || M<0){
    printf("No");
}else{
    if(M%2==0){   //先判断偶数缩短运行时间
        printf("No");
    }else if(M==2){
        printf("Yes");
    }else{
        for(i=2;i<=sqrt(M);i++){
            if(M%i==0){
                printf("No");
            }else{
                printf("Yes");
            }
        }
}

}
return 0;
}

结果:部分正确


#include <stdio.h>
#include <math.h>
int main()
{
    int M, i;
    scanf("%d", &M);

    if (M == 1 || M < 0)
    {
        printf("No");
    }
    else
    {
        if (M % 2 == 0)
        { //先判断偶数缩短运行时间
            printf("No");
        }
        else if (M == 2)
        {
            printf("Yes");
        }
        else
        {
            for (i = 2; i <= sqrt(M); i++)
            {
                if (M % i == 0)
                {
                    printf("No");
                    return 0;
                }
            }
            printf("Yes");
        }
    }
    return 0;
}
#include <stdio.h>
#include <math.h>

int isprime(int x)
{
    if (x < 2)
        return 0;
    int n = (int)sqrt(x);
    for (int i = 2; i <= n; i++)
        if (x % i == 0)
            return 0;
    return 1;
}

int main()
{
    int M;
    while (scanf("%d", &M) == 1)
    {
        if (isprime(M))
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}