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;
}