简单小算法

  • 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;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,355评论 0 33
  • 贪心算法 贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上...
    fredal阅读 13,052评论 3 52
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 9,293评论 0 6
  • 转眼间各奔东西,学校很多宿舍早已寡淡无味,没有了刺鼻难闻却专属的气味,没有吹着牛B梦想走出校门大展身手的野心勃勃,...
    一个无名之人阅读 3,388评论 3 4
  • 不知不觉中已经到了正月初七,今天立春,也是春节假期后的第一个工作日。我虽然还不曾离开家,但是也知道我该前行了,该做...
    伊云鹤阅读 1,004评论 2 1

友情链接更多精彩内容