算法1

1.例如求1000之內的素數:java

方法一:定義spa

素數:除了1和它自己之外再也不被其餘的除數整數。.net

[java]  view plain  copy
 
  1.     public void printPrime(){  
  2.         for(int i=2; i<1000; i++)  
  3.         {  
  4.             if(2==i || 3==i){  
  5.                 System.out.print(i+" ");  
  6.                 continue;  
  7.             }  
  8.             int j=2;  
  9.             while(j<i){  
  10.                 if(i%j==0){  
  11.                     break;  
  12.                 }  
  13.                 j++;  
  14.             }  
  15.             if(j==i){  
  16.                 System.out.print(i+" ");  
  17.             }  
  18.         }  
  19.     }  

 

方法二:合數code

1 合數定義:指天然數中除了能被1和自己整除外,還能被其餘數(0除外)整數的數blog

2 大於1的天然數,不是質數就是合數。ip

3 若是N是個合數,則必定存在大於1小於N的整數d1和d2,使得N=d1×d2,且 d1和d2中必有一個小於或等於√Nget

思路:大於1的整數中排除合數,剩下的就是素數。string

[java]  view plain  copy
 
  1.  public void printPrime(){  
  2.         for(int i=2; i<1000; i++){  
  3.             boolean isPrime =true;  
  4.             for(int j=2; j<(int)Math.sqrt(i); j++){  
  5.                 if(i%j==0)  
  6.                     isPrime=false;  
  7.             }  
  8.             if(isPrime){  
  9.                 System.out.print(i+" ");  
  10.             }  
  11.         }  
  12.  }  

 

判斷 101-200 之間有多少個素數,並輸出全部素數it

public class Prime {

    public static int count = 0;

    public static void main(String[] args) {

        for (int i = 101; i < 200; i++) {
            boolean b = true;
            for (int j = 2; j <=  Math.sqrt(i); j++) {//---------------

                if (i % j == 0) {
                    b = false;
                    break;
                }
            }
            if (b) {
                System.out.print(i+" ");
                count++;
            }
        }
        System.out.println("\n素數的個數:" + count);
    }
}for循環

發現 第二for循環不用 Math.sqrt(i) 老是有問題

而後,發現了這個問題:爲何要用Math.sqrt(i)方法(返回正確舍入的 double 值的正平方根)?

 由於,只須要判斷到這個值,
 例如:判斷100,只須要判斷到10就能夠了,10*10
 100=n1*n2,那麼n1或者n2必定有個<=10,因此只須要判斷的10
提升效率

2.java交換兩個變量的值

如下方法的根本原理就是: 

藉助第三個變量

c = a;
a = b;
b = c;

運算符-不借助第三變量: 
a = a+b; 
b = a-b; 
a = a-b; 
爲運算符-不借助第三個變量: 

(此種方法運用這種原理:一個數對另外一個數位異或兩次,該數不變)
a = a^b; 
b = a^b; 
a = a^b; 

複製代碼
/**
 * Swap
 * 互換兩個變量的值的方法
 * @author bc
 * @since 2018年3月27日
 */
public class Swap {
    public static void main(String[] args) {
        int a = 3, b = 5;
        System.out.println("===臨時變量===");
        temp(a, b);
        System.out.println("===算數運算===");
        arithmetic(a, b);
        System.out.println("===位運算====");
        bit(a, b);
    }

    // 藉助第三個變量,使a,b變量的值交換
    public static void temp(int a, int b) {
        System.out.println("a=" + a + ";b=" + b);

        int c = a;
        a = b;
        b = c;

        System.out.println("a=" + a + ";b=" + b);
    }

    // 算數運算--(不借助第三個變量)
    public static void arithmetic(int a, int b) {
        System.out.println("a=" + a + ";b=" + b);

        a = a + b;//8
        b = a - b;//3
        a = a - b;//5

        System.out.println("a=" + a + ";b=" + b);
    }

    // 位運算--(不借助第三個變量)
    public static void bit(int a, int b) {
        System.out.println("a=" + a + ";b=" + b);
        
        //按位異或的運算規則--異:1
        /**
         *     a    :0011
         *     b    :0101
         * a^b  :0110
         */
        a = a ^ b; //0110
        /**
         *     a     :0110
         *     b     :0101
         *     a^b  :0011
         */
        b = a ^ b; //0011
        /**
         *     a     :0110
         *     b     :0011
         *     a^b  :0101
         */
        a = a ^ b; //0101

        System.out.println("a=" + a + ";b=" + b);
    }
}
相關文章
相關標籤/搜索