开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情
引言
在考试中,数学问题是经常出现的一类问题,它们并不涉及很深的算法,但是和数学息息相关,接下来,我们将对日常考试中容易出现的一些数学问题进行总结,希望这篇文章能够带你打开程序设计的大门!!也祝大家考试取得好成绩!!
今天我们来介绍一下关于素数的判断
基本介绍
- 素数:也叫质数,即除了1和数字本身之外,不能被其他数整除的一类数。用数学符号表示,即对于1<a<n的正整数a,都有 n%a!=0 成立,那么简称a是素数。如果存在a满足n%a==0,那么a是合数。
注意:1不是素数也不是合数
- 如何判断整数n是否为素数呢?
- 方法一:对于1<a<n范围中的每个整数a,都进行n%a?=0的判断,如果只有1和n满足此条件,那么这个数就是素数。
- 但是素数的判断通常是作为整个算法的一部分,所以这样的复杂度很高。但是如果想快速的进行素数判定,应该怎样做呢?接下来我们就介绍一下方法二
- 方法二:假设 2~n-1 中存在 n 的因数,设因数为 k ,即 n%k==0
- 因为 k*(n/k)==n, 那么 k 和 n/k 就是 n 的因数
- *==n, 那么当 k<,必然有 n/k > , 所以我们只需要计算 2...(向下取整)是否存在 n 的因数即可
关键代码
bool isPrime(int n){
if(n<=1) return false;
int sqr =(int ) sqrt(1.0*n)//sqrt函数参数需要是double类型,1.0*n是为了将n转换成double类型
//接下来进行循环判断
for(int i=2;i<=sqr;i++){
if(n%i==0) return false;
//如果n是 i 的倍数,那么n就不是素数
}
return true;//此时n是素数
}