【C语言】判断素数的函数(完整代码)

素数在我们生活中的应用有很多,因此如何判断一个自然数是不是素数也就变得很重要了。
素数也叫质数,指大于1的自然数中,除了1和它本身外不再有其他因数的自然数,比如2、3、5、7、11、13……。

接下来,我就实现一个用来判断输入的数是不是素数的函数。

主要思想:

根据素数的特点“素数只能被1和自己整除“。
所以我们可以用2到n 依次除以n,若之间有能整除n的数存在,则当前数不是素数,否则是素数。
但其实用2到 sqrt(n)之间的数做除数就足够了,具体代码实现思路如下:

	int i = 2;   //素数可整除的最小数
	while (i <= sqrt(n)) 
	{
		if (n%i == 0)
		{
			printf("\n %d不是素数!\n", n);
			break;  //当前数能整除其他任意一个数,即表示非素数。跳出while循环
		}
		i++;
	}
	if(i > sqrt(n))
	   printf("\n %d是素数!\n", n);

思考:为什么只需要循环到sqrt(n)的时候,就可以判断出是否为素数了呢?

这就需要用到数学知识推导了:
我们设n = sqrt(n)sqrt(n),再设n=xy(其中x>=y)
我们知道最小的非素数是4,即x=y=2=sqrt(4);然后是非素数6,即x=3>sqrt(6),y=2<sqrt(6)
由此我们发现,若当前数n是一个非素数,我们从2开始循环到sqrt(n)的时候,x,y中较小的除数y一定已经被找到了
如果我们继续循环比sqrt(n)大的数,无非就是找到y对应的另一个除数x。这毫无意义(如果想知道另一个除数x,可直接计算n/y)
故我们只需要循环到sqrt(n)即可判断出当前自然数n是否是素数

完整代码:
#include <stdlib.h>
#include <stdio.h>
# include<math.h>
void is_prime(int n)
{
	int i = 2;   //素数可整除的最小数
	while (i <= sqrt(n))
	{
		if (n%i == 0)
		{
			printf("\n %d不是素数!\n", n);
			break;  //当前数能整除其他任意一个数,即表示非素数。跳出while循环
		}
		i++;
	}
	if(i > sqrt(n))
	   printf("\n %d是素数!\n", n);
}
int main()
{
	int a = 9;
//	printf("请输入要判断的数:");
//	scanf("%d", &a);
	is_prime(a);
	return 0;
}

执行结果如下:
在这里插入图片描述

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值