7 判断一个整数是否素数(关键词-for)

问题遇到的现象和发生背景

在pta上判断一个素数的题,结果没错误,运行超时是什么问题造成的?

问题相关代码,请勿粘贴截图

#include<stdio.h>
int main()
{
long n,i,j=0;
scanf("%ld",&n);
if(n>=1&&n<=2147483647)
{
for(i=1;i<=n;i++)
{
if(n%i==0)
{j++;}
}
if(j==2)
{
printf("YES");
}
else
printf("NO");
}
}

运行结果及报错内容

运行超时
0 --

我的解答思路和尝试过的方法
我想要达到的结果

1s大概能执行1e8的指令,而如果超过这个量级就会超时。
题主里面的for循环如果遇见一个比较大的数字,是很有可能超时的。
建议修改一下判断素数的方法。

if(n%i==0)
{j++;}
你在开玩笑吗
i为什么要从1开始到n结束
从2开始到n开方结束,只要找到任何一个,就可以判断不是素数了
你还真的要找到所有的因子吗

这么改下,供参考:

#include <stdio.h>
int main()
{
    long n, i, j = 0;
    scanf("%ld", &n);
    if (n >= 1 && n <= 2147483647)
    {
        for (i = 2; i < n; i++) // for (i = 1; i <= n; i++)
        {
            if (n % i == 0)
            {
                break;  //j++;
            }
        }
        if (i >= n && n != 1)  //if (j == 2)
        {
            printf("YES");
        }
        else
            printf("NO");
    }
}