筛法求素数

  初学Java,自己原本一直在用C编写单片机的程序。

  参考网上的资料,自己写了一个Java的筛法的程序。

 1 public class JTask2 {
 2     private static final int NUM_MAX = 10;
 3     private static boolean[] sieve;
 4     public static void main(String[] args) {
 5         getSieve(NUM_MAX);
 6         for(boolean x:sieve){
 7             System.out.println(x);    
 8         }
 9     }
10     public static void getSieve(int max){
11         int i, j, imax = (int)Math.sqrt(max);
12         int num = (max >>1) - 1; 
13         sieve = new boolean[num];
14         for (i = 0; (i<<1)+3 <= imax; i++){
15             if (!sieve[i]){
16                 for (j = i*((i<<1)+6)+3; j < num; j +=((i<<1))+3){
17                     sieve[j] = true;
18                 }
19             }
20         }
21     }
22 }

  <<1是乘以2,>>1是除以2。左右移的优先级是比加减低的,所以要加括号。

     Java中没有C的宏定义,要用到static final

  static保证它的空间效率:一个类中只有一份,而不会每个对象都只有一份。 
  final保证它不会被修改,从而编译器可以做某些优化,即相当于保证了时间效率。

  上边两句话是复制黏贴别人的。。

  程序参考:

  http://www.cnblogs.com/skyivben/archive/2011/12/04/2276031.html

  http://blog.sina.com.cn/s/blog_4b5210840100cm4r.html

  程序算法就是新浪博客里优化了的那个。

posted @ 2012-09-13 16:55  飞一般炒饭  阅读(176)  评论(0编辑  收藏  举报