【Java 判断素数的几个方法】简单理解
最近刷题刷到了包含判断素数问题的题型,这里写篇博客来分享下!
首先我们来讲下什么是素数
1、素数的概念
-
素数在数学中我们也叫:质数,两个是一个东西 素数:一个大于1的整数,只能被 1 和 自身 整除的的整数,这种整数我们称为:素数,否则称为:合数;例如:2,3,5,7,11,13 都是素数 补充:大于 2 的所有质数都是 奇数
2、方法一
-
1、我们就是单纯的根据素数概念来判断素数,对于 2 这个素数我们单独判断,例如:判断 5 是否为素数,那我们就根据:5%2,5%3,5%4 求余结果都不为 0 则为素数,否反之亦然。那就是对于给定的大于 2 的自然数,我们用 n%【2,3,…,n-1】判断结果是否为 0 就好 2、 我们再添加一个条件,那就是:大于 2 的所有质数都是 奇数,所以对于从 3 开始每次 +=2 只判断奇数即可
代码:
public static boolean isPrime(int n){ if (n<=3){ return n>1; } for (int i = 2;i<n;i++){ if (n%i==0){ //不是素数 return false; } } return true; }
2、方法二
优化
-
不大于根号n的最大的整数还没有整除n,那么这个n肯定是素数 说明:如果一个大于根号n的整数m能整除n,那么n/m一定是一个小于根号n的一个整数
代码
public static boolean isPrime(int n){ if (n<=3){ return n>1; } for (int i = 2;i<=Math.sqrt(n);i++){ if (n%i==0){ //不是素数 return false; } } return true; }
2、方法三
孪生素数:孪生素数指的是间隔为 2 的相邻素数
-
1、当 n>=6,n-1 和n+1 为孪生素数,那么 n 一定是6的倍数 2.素数的分布规律:当 n>=5时,如果n为素数,那么 n%6=1∣∣n%6=5,即n一定出现在6x(x≥1)两侧。(就是说大于等于5的素数一定是分布在6倍数的左右两侧,但在6倍数左右两侧的数不一定是素数)
代码:
public static boolean isP(int num) { if (num <= 3) { return num > 1; } if (num % 6 != 1 && num % 6 != 5) { return false; } int sqrt = (int) Math.sqrt(num); for (int i = 5; i <= sqrt; i += 6) { if (num % i == 0 || num % (i + 2) == 0) { return false; } } return true; }
下一篇:
牛客网[编程题]表达式求值