PTA:7-7 判断一个整数是否为素数

本文介绍了一个判断整数是否为素数的算法实现,通过输入一个整数M,程序将判断并输出该数是否为素数。素数定义为只能被1和自身整除的正整数,特别地,1不被认为是素数。

7-7 判断一个整数是否为素数 (15 分)

本题要求编写程序,判断一个给定的整数是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。

输入格式:
输入在一行中给出一个需要判断的整数 M(−2e​31≤M≤2e​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 a,n=2,k=1;float limit;
	scanf("%d",&a);
	limit=sqrt(a);
	if(a<=0||a==1){k=0;printf("No");}
	else
	{while(n<=limit)
	{
		
		if(a%n==0)
		{
			k=0;printf("No");
			break;
		}
		n++;
	}
	}
	if(k==1){printf("Yes");}
}
PTA平台上判断一个整数是否素数,可依据素数定义(只能被1和自身整除的正整数,1不是素数,2是素数)进行程序编写。以下是几种不同的实现方法: ### 方法一 ```c #include<stdio.h> #include<math.h> int main() { int i,m,flag=1; scanf("%d",&m); if(m<=1) flag=0; for(i=2;i<=sqrt(m);i++) { if(m%i==0) { flag=0; break; } } if(flag==1) printf("Yes"); else printf("No"); return 0; } ``` 该方法先将`flag`初始化为1,若输入的整数`m`小于等于1,将`flag`置为0。接着从2开始到`sqrt(m)`进行遍历,若`m`能被其中某个数整除,将`flag`置为0并跳出循环。最后根据`flag`的值输出结果[^1]。 ### 方法二 ```c #include<stdio.h> #include<math.h> int main(void) { int i; double n; scanf("%lf",&n); if(n <= 1) printf("No"); else { for(i = 2;i <= sqrt(n);i++) { if((int)n%i==0) break; } if(i > sqrt(n)) printf("Yes\n"); else printf("No\n"); } return 0; } ``` 此方法将输入的数以`double`类型读取,若该数小于等于1,直接输出`No`。否则从2开始到`sqrt(n)`进行遍历,若`n`能被其中某个数整除则跳出循环。最后根据循环结束时`i`和`sqrt(n)`的大小关系输出结果[^2]。 ### 方法三 ```c #include<stdio.h> #include<math.h> int main() { int N, a = 0, i; scanf("%d",&N); if(N == 1) printf("No"); else if(N == 2) printf("Yes"); else if(N <= 0) printf("No"); else { for(i = 2; i <= sqrt(N); i++) { if(N % i == 0) a++; } if(a == 0) printf("Yes"); else printf("No"); } return 0; } ``` 该方法对输入的数进行分类讨论,若为1或小于等于0,输出`No`;若为2,输出`Yes`。对于其他情况,从2开始到`sqrt(N)`进行遍历,若`N`能被其中某个数整除,`a`加1。最后根据`a`的值输出结果[^3]。 ### 方法四 ```c #include<stdio.h> #include<math.h> int main() { int num, flag = 0, j; scanf("%d", &num); if (num == 1) flag = 1; if(num>0) { for (j = 2; j <= sqrt(num); j++) { if (num % j == 0) { flag = 1; break; } } if (flag) printf("No\n"); else printf("Yes\n"); } else { printf("No\n"); } return 0; } ``` 此方法先判断输入的数是否为1,若是则将`flag`置为1。若输入的数大于0,从2开始到`sqrt(num)`进行遍历,若`num`能被其中某个数整除,将`flag`置为1并跳出循环。最后根据`flag`的值输出结果[^4]。 ### 方法五 ```c #include<stdio.h> int main() { int M,i; scanf("%d",&M); if(M<=0) printf("No"); else { if(M==1) printf("No"); else if(M==2) printf("Yes"); else { for(i=3;i<M;i++) { if(M%i==0) { printf("No"); break; } } if(i==M) printf("Yes"); } } return 0; } ``` 该方法先判断输入的数是否小于等于0,若是则输出`No`。接着对1和2的情况分别处理,对于大于2的数,从3开始到`M`进行遍历,若`M`能被其中某个数整除,输出`No`并跳出循环。最后根据循环结束时`i`的值输出结果[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值