判断一个数是否是素数

深碍√TFBOYSˉ_ 2023-07-17 15:41 88阅读 0赞

什么是素数?

素数释义:

曾称质数。一个大于1的正整数,如果除了1和它本身以外,不能被其他正整数整除,就叫素数。如2,3,5,7,11,13,17…。

根据素数定义判断素数

  1. public boolean isPrime(int n){
  2. if(n < 4){
  3. return n>1;
  4. }
  5. for(int i=2;i<n;i++){
  6. if(n % i == 0){
  7. return false;
  8. }
  9. }
  10. return true;
  11. }

从2开始,一直到小于其自身,依次判断能否被n整除即可,能够整除则不是质数,否则是质数。

初步优化

参考算法一书,人民邮电出版社

假如n是合数,必然存在非1的两个约数p1和p2,其中p1<=sqrt(n),p2>=sqrt(n)

  1. public boolean isPrime(int n) {
  2. if (n <= 3) {
  3. return n > 1;
  4. }
  5. int sqrt = (int)Math.sqrt(n);
  6. for (int i = 2; i <= sqrt; i++) {
  7. if(n % i == 0) {
  8. return false;
  9. }
  10. }
  11. return true;
  12. }

最终优化

质数还有一个特点,就是它总是等于 6x-1 或者 6x+1,其中 x 是大于等于1的自然数。

6x能被2,3,6整除肯定不是质数

6x+1

6x+2 能被2整除

6x+3 能被3 整除

6x+4 能被2整除

6x+5 等价于6x-1

  1. public static boolean isPrime(int num) {
  2. if (num <= 3) {
  3. return num > 1;
  4. }
  5. // 不在6的倍数两侧的一定不是质数
  6. if (num % 6 != 1 && num % 6 != 5) {
  7. return false;
  8. }
  9. int sqrt = (int) Math.sqrt(num);
  10. for (int i = 5; i <= sqrt; i += 6) {
  11. if (num % i == 0 || num % (i + 2) == 0) {
  12. return false;
  13. }
  14. }
  15. return true;
  16. }

发表评论

表情:
评论列表 (有 0 条评论,88人围观)

还没有评论,来说两句吧...

相关阅读

    相关 c#判断一个是否素数

    素数是只能被1或本身整除,且不能为其他两个整数的乘积。1、2、3本身就是素数,判断一个数是否为素数,只需要用这个值依次除以2到它的开方数,如果其中有一个数可以整除,那么该值不为