码迷,mamicode.com
首页 > 其他好文 > 详细

素数相关

时间:2019-07-28 17:07:52      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:integer   its   code   new   get   vat   pre   相关   class   

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 }

 

素数相关

标签:integer   its   code   new   get   vat   pre   相关   class   

原文地址:https://www.cnblogs.com/ainsliaea/p/11221805.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!