筛法求素数
初学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
程序算法就是新浪博客里优化了的那个。