质数判断

质数的分布具有特点:

经过证明可以得到,(大于等于5的)质数一定和6的倍数相邻,一定是6x-1或6x-1。利用这种特性。可以对整数进行筛选,只判断那些是6x-1或6x-1的整数是否为质数。

 

 

 

 

 

证明过程如下:

令x≥1,将大于等于5的自然数表示如下: ······6x-1,6x,6x+1,6x+2,6x+3,6x+4······(相邻6个数为一组)

在以上的数字中,6x、6x+2和6x+4是偶数,一定不是质数;6x+3可以分解为3(2x+1),不是质数,因此质数只能是6x-1和6x+1。

 

 1 public static boolean isPrime(int n) {
 2     if (n <= 3) {
 3         return n > 1;
 4     }
 5     // 只有6x-1和6x+1的数才有可能是质数
 6     if (n % 6 != 1 && n % 6 != 5) {
 7         return false;
 8     }
 9     // 判断这些数能否被小于sqrt(n)的奇数整除
10     int sqrt = (int) Math.sqrt(n);
11     for (int i = 5; i <= sqrt; i += 6) {
12         if (n % i == 0 || n % (i + 2) == 0) {
13             return false;
14         }
15     }
16     return true;
17 }

 

posted @ 2022-10-04 20:16  Luli&  阅读(83)  评论(0编辑  收藏  举报