Java 一个给定的数字可以写成两个或多个连续的正整数的和吗?

Java 一个给定的数字可以写成两个或多个连续的正整数的和吗?,java,number-theory,Java,Number Theory,我需要编写一个方法,该方法接受一个int并返回true,如果可以将数字写入两个或多个连续正整数的总和,则返回false boolean IsSumOfConsecutiveInts(int num) 我发现所有奇数(除数字1外)都可以写成两个连续的正整数之和: return (num > 1 && num % 2 == 1); 但这并不能解释那些可以写成两个以上连续正整数之和的数字(例如6==1+2+3) 如何确定一个数字是否可以写成两个或两个以上连续正整数的和?这些数

我需要编写一个方法,该方法接受一个
int
并返回
true
,如果可以将数字写入两个或多个连续正整数的总和,则返回
false

boolean IsSumOfConsecutiveInts(int num)
我发现所有奇数(除数字1外)都可以写成两个连续的正整数之和:

return (num > 1 && num % 2 == 1);
但这并不能解释那些可以写成两个以上连续正整数之和的数字(例如
6==1+2+3

如何确定一个数字是否可以写成两个或两个以上连续正整数的和?

这些数字被称为

而且,方便的是,唯一不礼貌的数字是2的幂

这给了我们两个选择。我们可以确定一个数字是礼貌的,也可以确定它不是2的幂

我两个都做了;后者更容易(也更有效)

  • 这决定了数字是否礼貌:

    有两种情况,但在任何一种情况下,我们都可以非常简单地表示所有可能的数,它们是
    i
    连续整数的和

  • i
    为偶数时,
    num
    必须等于
    (i*n)+(i/2)
    ,其中
    n
    为非负整数。这当然可以写成
    num%i==i/2

  • i
    为奇数时,
    num
    必须等于
    i*n
    ,其中
    n
    为非负整数。这给了我们第二个条件
    num%i==0


  • 除这些条件外,
    num
    不能小于第一个
    i
    正整数之和。因此,我们的
    for
    循环的条件:
    1和2中的sumoffirstiinteger不应该
    x
    num
    ?请您也将
    y
    i
    重命名为更具描述性的名称好吗?@KenY-N是正确的。虽然,没有理由重命名“i”变量,因为它是“迭代”中常用的变量。。因为它是一个循环。
    boolean IsSumOfConsecutiveInts(int num)
    {
        int sumOfFirstIIntegers = 3;
        for (int i = 2; sumOfFirstIIntegers <= num; i++)
        {
            if (i%2 == 0 ? (num%i == i/2) : (num%i == 0))
            {
                return true;
            }
            sumOfFirstIIntegers += i + 1;
        }
        return false;
    }
    
    i    all sums of i consecutive positive integers
    2    3, 5, 7, 9...
    3    6, 9, 12, 15...
    4    10, 14, 18, 22...
    5    15, 20, 25, 30...
    
    boolean IsSumOfConsecutiveInts(int num)
    {
        return (num & (num - 1)) != 0;
    }