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;
}