学会一个简易的素数判断

122 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情

引言

在考试中,数学问题是经常出现的一类问题,它们并不涉及很深的算法,但是和数学息息相关,接下来,我们将对日常考试中容易出现的一些数学问题进行总结,希望这篇文章能够带你打开程序设计的大门!!也祝大家考试取得好成绩!!

今天我们来介绍一下关于素数的判断

基本介绍

  1. 素数:也叫质数,即除了1和数字本身之外,不能被其他数整除的一类数。用数学符号表示,即对于1<a<n的正整数a,都有 n%a!=0 成立,那么简称a是素数。如果存在a满足n%a==0,那么a是合数。

注意:1不是素数也不是合数

  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\sqrt{n} *n\sqrt{n}==n, 那么当 k<n\sqrt{n},必然有 n/k > n\sqrt{n}, 所以我们只需要计算 2...n\sqrt{n}(向下取整)是否存在 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是素数
}