请教一下这个运行超时要怎么更改?

img

#include<stdio.h>
main()
{
int M,i;
scanf("%d",&M);
for(i=2;i<=(M-1);i++)
{
if(M%i==0)
break;
}
if(M<=1)
printf("No");
else if(i<M)
printf("No");
else
printf("Yes");
}

供参考:

#include <stdio.h>
#include <cstdio>
int main()
{
    int M, i, flg = 1;
    scanf("%d",&M);
    for (i = 2; i*i <= M ; i++)
    {
        if (M % i == 0)
        {
            flg = 0;
            break;
        }
    }
    if (M != 1 && flg == 1)
        printf("Yes");
    else
        printf("No");
    return 0;
}

尝试优化代码
比如,因为素数的属性导致大于其开平方的整数必须要和小于他开平方的整数相乘才有可能和他相等。所以判断的范围可以缩短到(2~判断数ˣ(x=1/2))
再比如,任何一个合数都能拆分成素数的积,所以判断条件里只要判断素数就可以了,又因为所有大于5的素数都在6的倍数旁边及(6x±1),所以循环条件也可以进行简化

如果还不行,可以去学习算法了。