【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("
 %d不是素数!
", n);
			break;  //当前数能整除其他任意一个数,即表示非素数。跳出while循环
		}
		i++;
	}
	if(i > sqrt(n))
	   printf("
 %d是素数!
", 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("
 %d不是素数!
", n);
			break;  //当前数能整除其他任意一个数,即表示非素数。跳出while循环
		}
		i++;
	}
	if(i > sqrt(n))
	   printf("
 %d是素数!
", n);
}
int main()
{
          
   
	int a = 9;
//	printf("请输入要判断的数:");
//	scanf("%d", &a);
	is_prime(a);
	return 0;
}

执行结果如下:

经验分享 程序员 微信小程序 职场和发展