簡單小算法

  • 1、求素數

/**
 *  對正整數n,如果用2到根號n之間的所有整數去除,均無法整除,則n為質數。
 *  質數大于等于2 不能被它本身和1以外的數整除
 * @param val
 * @return
 */
private static boolean testPrime(int val){
    if (val<=3 && val>0) {
        return true;
    }
    for (int i = 2; i <= Math.sqrt(val); i++) {
        if (val%i==0) {
            return false;
        }
    }
    return true;
}
  • 2、查找整數對應二進制中1的個數

1、為什么n &= (n – 1)能清除最右邊的1呢?因為從二進制的角度講,n相當于在n - 1的最低位加上1。舉個例子,8(1000)= 7(0111)+ 1(0001),所以8 & 7 = (1000)&(0111)= 0(0000),清除了8最右邊的1(其實就是最高位的1,因為8的二進制中只有一個1)。再比如7(0111)= 6(0110)+ 1(0001),所以7 & 6 = (0111)&(0110)= 6(0110),清除了7的二進制表示中最右邊的1(也就是最低位的1)。

    private static int BitCount2(int n) {
        int c = 0;
        for (c = 0; c<n; ++c) {
            n &= (n - 1); // 清除最低位的1
        }
        return c;
    }

2、普通移位算法

int BitCount(int n) {
        int c = 0; // 計數器
        while (n > 0) {
            if ((n & 1) == 1) // 當前位是1
                ++c; // 計數器加1
            n >>= 1; // 移位
        }
        return c;
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,769評論 0 33
  • 貪心算法 貪心算法總是作出在當前看來最好的選擇。也就是說貪心算法并不從整體最優考慮,它所作出的選擇只是在某種意義上...
    fredal閱讀 9,279評論 3 52
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile麗語閱讀 3,857評論 0 6
  • 轉眼間各奔東西,學校很多宿舍早已寡淡無味,沒有了刺鼻難聞卻專屬的氣味,沒有吹著牛B夢想走出校門大展身手的野心勃勃,...
    一個無名之人閱讀 460評論 3 4
  • 不知不覺中已經到了正月初七,今天立春,也是春節假期后的第一個工作日。我雖然還不曾離開家,但是也知道我該前行了,該做...
    伊云鶴閱讀 90評論 2 1