public class test25 { //1.定义一种数,可以表示为若干个连续(数量大于1)正数和的形式 //比如5=2+3,12=3+4+5 //给定一个参数N,返回是不是可以表示若干连续正数和的形式 //暴力解法先打表 public static boolean isMSum1(int num){ for (int i = 1; i <= num; i++) {//开头的数是i int sum = i; for (int j = i +1; j<= num; j++) { if(sum + j > num){ break; } if(sum + j == num){ return true; } sum += j; } } return false; } public static void main(String[] args) { //打表找规律 for (int num = 0; num < 200; num++) { System.out.println(num + ":" + isMSum1(num)); } } public static boolean isMSum2(int num){ if(num < 3){ return false; } //num如果是2的n次幂,返回false //num & (num - 1) 这个表达式在计算机科学中经常被用来检查一个整数是否是2的幂。 //如果 num是2的幂,那么 num & (num - 1) 的结果将为0。 // 这是因为二进制表示中,2的幂只有一个位为1,而它减去1后,那个1会变成0,其他位都会变成1。因此,这两个数进行按位与操作的结果就是0。 return (num & (num -1)) != 0 ; } }