L1-028 判断素数 (C语言)
本题的目标很简单,就是判断一个给定的正整数是否素数。
输入格式:
输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于2
31
的需要判断的正整数。
输出格式:
对每个需要判断的正整数,如果它是素数,则在一行中输出Yes,否则输出No。
输入样例:
2
11
111
输出样例:
Yes
No
错误代码
#include<stdio.h>
int prime(int a); //判断是否为素数的函数
int main()
{
int n ,a,i;
scanf("%d\n",&n);
for(i=0;i<n;i++)
{
scanf("%d\n",&a);
if(prime(a)) //prime函数返回值为1,输出Yes
printf("Yes\n");
else //函数返回值为0,输出No
printf("No\n");
}
return 0;
}
int prime(int a)
{
int i;
if(a==1)
return 0;
else
{
for( i=2;i*i<=a;i++)
{
if(a%i==0) return 0;
}
}
return 1;
}
结果是
很好奇第一次出现运行超时(这代码正常情况下可以运行)
发现是prime函数那里,i*I<=a那里运行超时
如果是直接调用math.h库里的sqrt函数的话
运行正常
正确代码
#include<stdio.h>
#include<math.h> //调用math.h库
int prime(int a);
int main()
{
int n ,a,i;
scanf("%d\n",&n);
for(i=0;i<n;i++)
{
scanf("%d\n",&a); //每次循环都给a重新赋值
if(prime(a))
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
int prime(int a)
{
int i;
if(a==1) //1不是素数
return 0;
else
{
for(i=2;i<=sqrt(a);i++)
{
if(a%i==0)
return 0;
}
}
return 1;
}
(欢迎大佬在评论区解释👇)