前言
素数的判断方法是我们在写程序的过程中经常碰到的问题,今天给大家带来素数的一些判断方法。
一、 什么是素数?
质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。
根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积;而且如果不考虑这些质数在乘积中的顺序,那么写出来的形式是唯一的。最小的质数是2。
二、判断方法
把需要判断的数记作i
方法一(暴力筛选)
-
写一个循环,产生2到i-1的数,创建一个变量j,将这些数放在j中;
-
只要i%j有一次能够除尽,那么i就不是质数。
-
再创建一个变量k=1,当不是质数时,将k赋0,
-
循环结束后根据k的值,写一个if循环即可。
所以可以写出这样一个函数。
#include <stdio.h>
int main()
{
int i = 0;
scanf("%d",&i);
int j = 0;
int k = 1 ;
for(j = 2;j <= i-1;j++)
{
if(i % j == 0 )
{
k = 0 ;
break;
}
}
if(k)
{
printf("质数\n”);
}
return 0;
}
方法二(奇数角度)
仔细思考一下,除2以外的偶数,全部都不是质数。
由此可以优化代码
#include <stdio.h>
int main()
{
int i = 0;
scanf("%d",&i);
int j = 0;
int k = 1;
if( i ==1 || i == 2)
{
printf("质数\n”);
}
for(j = 3;j <= i-1;j += 2)
{
if(i % j == 0 )
{
k = 0 ;
break;
}
}
if(k)
{
printf("质数\n”);
}
return 0;
}
方法三(开平方角度)
思考一下,每一个数都可以写成这样的形式
a = b * c
例如
4=2 * 2;
6 = 2 * 3;
24 = 2 * 12=3 * 8=4 * 6;
可以发现,无论是哪一个数,均存在这种规律,
每一个数i都可以拆成两个数相乘,且其中一定有一个数小于等于i的平方根。
至于如何开平方,这里引入一个库函数sqrt()
sqrt的头文件是<math.h>
可以写出代码
#include <stdio.h>
#include <math.h>
int main()
{
int i = 0;
scanf("%d",&i);
int j = 0;
int k = 1;
if( i ==1 || i == 2)
{
printf("质数\n”);
}
for(j = 3;j <= sqrt(i) ;j += 2)
{
if(i % j == 0 )
{
k = 0 ;
break;
}
}
if(k)
{
printf("质数\n”);
}
return 0;
}
方法四(函数角度)
结合以上方法,并写出函数形式。
代码如下
#include <stdio.h>
#include <math.h>//头文件很重要,不要忘记。
void is_prime(int i)
{
int j = 0;
int k = 1;
if( i ==1 || i == 2)
{
printf("质数\n”);
}
for(j = 3;j <= sqrt(i) ;j += 2)
{
if(i % j == 0 )
{
k = 0 ;
break;
}
}
if(k)
{
printf("质数\n”);
}
}
int main()
{
int i = 0;
scanf("%d",&i);
is_prime(i);
return 0;
}
结束语和拓展(各种nb的角度)
ok
其实还有更多更高级的方法,比如埃拉托斯特尼(Eratosthenes)筛法,线性筛选–欧拉筛法,欧拉筛法优化 等等受限于知识的限制,就先不分享啦
想要了解的小伙伴可以参考这篇文章
如果有更好的方法,请私信博主。
今天的分享到这里结束!
!!!!!!!!给新人博主一个关注吧!!!!!!!!
!!!!!!!!!!!!点点赞吧!!!!!!!!!!!