素数相关

Posted ainsliaea

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了素数相关相关的知识,希望对你有一定的参考价值。

1. 判断素数

 1 /*
 2  * 判断素数
 3  * 除了 2 和 3,其他的素数都在 6 附近,可以据此加快判断的速度
 4  * */
 5 private boolean isPrime(int n) 
 6     if (n == 1) 
 7         return false;
 8     
 9     if (n == 2 || n == 3) 
10         return true;
11     
12     if (n % 6 != 1 && n % 6 != 5) 
13         return false;
14     
15     int n_sqrt = (int) Math.sqrt(n);
16     for (int i = 5; i <= n_sqrt; i += 6) 
17         if (n % (i) == 0 || n % (i + 2) == 0) 
18             return false;
19         
20     
21     return true;
22 

2. 埃氏筛

 1 /*
 2  * 用 Bitmap 实现埃氏筛。
 3  * */
 4 BitSet eratosthenes_bitmap(int n) 
 5     BitSet bs = new BitSet(n + 1);
 6     bs.set(0,n + 1,true);
 7     bs.set(0,false);
 8     bs.set(1,false);
 9 
10     int n_sqrt = (int) Math.sqrt(n);
11     for (int i = 2; i <= n_sqrt; i++) 
12         if (bs.get(i)) 
13             for (int j = i * i; j <= n; j += i) 
14                 bs.set(j,false);
15             
16         
17     
18 
19     return bs;
20 

 3. 线性筛

 1 /*
 2  * 用 Bitmap 实现线性筛
 3  * */
 4 BitSet linear_bitmap(int n) 
 5     BitSet bs = new BitSet(n + 1);
 6     bs.set(0, n + 1, true);
 7     bs.set(0, false);
 8     bs.set(1, false);
 9 
10     int numOfPrimes = 0;
11     List<Integer> primes = new ArrayList<>();
12     for (int i = 2; i <= n; i++) 
13         if (bs.get(i)) 
14             primes.add(i);
15             numOfPrimes++;
16         
17         for (int j = 0; j < numOfPrimes && i * primes.get(j) <= n; j++) 
18             bs.set(i * primes.get(j), false);
19             if (i % primes.get(j) == 0) 
20                 break;
21             
22         
23     
24 
25     return bs;
26 

 

以上是关于素数相关的主要内容,如果未能解决你的问题,请参考以下文章

素数相关知识

素数判定相关资料

java 素数相关

素数相关?(有关素数的题持续更新中)x

LeetCode 堆(优先级队列) 相关题目

Android课程---手机尺寸相关的概念 +尺寸单位+关于颜色