判断一个数是否是素数

已知素数是一个只能被1和自身整除的数。

方法1

1不是素数,2是素数。

若要判断一个数n是否为素数,那么可以利用for循环,取[2,n-1]中的数逐个与n试除。

情况a:如果[2,n-1]中有一个数能被n整除,则这个数不是素数;

情况b:如果[2,n-1]中的所有数都不能被n整除,说明这个数只能被1和自身整除,即这个数是素数。

最后打印结果的思路是:

                 循环结束后如果为情况a则执行break指令跳出循环后循环变量 i 的值一定是小于n的;

                                   如果为情况b,则结束循环后循环变量 i 的值就会等于n。

#include<stdio.h>
int main(void)
{
	//判断一个数是不是素数
	//素数仅能被1和自身整除
	int i = 0;
	int n=0;
	scanf("%d", &n);
	//1是素数,2不是素数
	if (n == 1)
	{
		printf("不是素数\n");
	}
	if (n == 2)
	{
		printf("是素数\n");
	}
	for (i = 2; i < n; i++)
	{
		//判断n能否被1到n中间的数整除
		if (n % i == 0) 
		{
			break;
		}
	}
	if (i == n) 
	{
		printf("是素数\n");
	}
	else
	{
		printf("不是素数\n");
	}
	return 0;
}

方法2

因为n不可能被大于n/2的数整除,所以 i 的取值范围可以缩小到[2,n/2],做法与方法一相同。

#include<stdio.h>
int main(void)
{
	//判断一个数是不是素数
	//素数仅能被1和自身整除
	int i = 0;
	int n = 0;
	scanf("%d", &n);
	//1是素数,2不是素数
	if (n == 1)
	{
		printf("不是素数\n");
	}
	if (n == 2)
	{
		printf("是素数\n");
	}
	for (i = 2; i <= n/2; i++)
	{
		//判断n能否被1到n/2中间的数整除
		if (n % i == 0)
		{
			break;
		}
	}
	if (i == n/2+1)
	{
		printf("是素数\n");
	}
	else
	{
		printf("不是素数\n");
	}
	return 0;
}

方法3

由数学知识可以证明 i 的取值范围还可缩小为[2,√n]。

注:在C语言编程中开平方根的运算需要用sqrt函数(√n 用 limit 代替),需要调用#include<math.h>头文件。

#include<stdio.h>
#include<math.h>
int main(void)
{
	int i = 0;
	int n = 0;
	scanf("%d", &n);
	if (n == 1)
	{
		printf("不是素数\n");
	}
	if (n == 2)
	{
		printf("是素数\n");
	}
	int limit = sqrt(n);
	for (i = 2; i <= limit; i++)
	{
		if (n % i == 0)
			break;
	}
	if (i > limit)
	{
		printf("是素数\n");
	}
	else
	{
		printf("不是素数\n");
	}
	return 0;
}

总结:素数的判断很好地考察了对循环语句的使用,我们需要理解循环什么时候结束,以及结束后循环变量的值为多少,掌握这个点可以有助于我们更清晰地完成后面的输出要求。

通过观察你可能发现这三种方法结构大致相同,只是循环体中循环变量的取值范围不同,所以在以后如果一个问题要求我们使用循环语句判断并输出,可以先写出循环语块,接着在循环后可以针对循环变量 i 的值运用 if 语句拟写相应输出。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liyangtao_04

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值