1.例如求1000之內的素數:java
方法一:定義spa
素數:除了1和它自己之外再也不被其餘的除數整數。.net
方法二:合數code
1 合數定義:指天然數中除了能被1和自己整除外,還能被其餘數(0除外)整數的數blog
2 大於1的天然數,不是質數就是合數。ip
3 若是N是個合數,則必定存在大於1小於N的整數d1和d2,使得N=d1×d2,且 d1和d2中必有一個小於或等於√Nget
思路:大於1的整數中排除合數,剩下的就是素數。string
判斷 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); } }