- 5 = 2 + 3
- 12 = 3 + 4 + 5
- 思路:
- 暴力找出规律
- 两个for循环
- 如果大于这个数直接跳出循环
package class01;
public class Code03_MSumToN {
public static boolean isMSum1(int num) {
for (int i = 1; i <= num; 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 boolean isMSum2(int num) {
if (num < 3) {
return false;
}
return (num & (num - 1)) != 0;
}
public static void main(String[] args) {
for (int num = 1; num < 200; num++) {
System.out.println(num + " : " + isMSum1(num));
}
System.out.println("test begin");
for (int num = 1; num < 5000; num++) {
if (isMSum1(num) != isMSum2(num)) {
System.out.println("Oops!");
}
}
System.out.println("test end");
}
}
- javascript版本
- (num & (num - 1)) == 0 说明num是2的某次幂
function isMSum(num) {
for(let i = 1; i <= num; i++) {
let sum = i
for(let j = i + 1; j <= num - i; j++) {
if(sum + j == num) {
return true
}
if(sum + j > num) {
break
}else {
sum += j
}
}
}
return false
}
function isMSum2(num) {
if(num < 3) {
return false
}
return (num & (num - 1)) != 0
}
console.log(isMSum(5) == isMSum2(5))
console.log(isMSum(15) == isMSum2(15))
console.log(isMSum(25) == isMSum2(25))