【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)
{
c++判断素数
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);
return0;
}
执⾏结果如下: