在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");
}
}