给定的数字是否可以表示为两个或多个连续正数的和。

例如:

1 + 2 +3 = 6
4 + 5 = 9
  • 如果该数字可以表示为连续数字的和,则返回True,否则返回False
def check_consecutive_sum(n): 
    if n % 2 == 1:       
        return True
    if n & (n - 1) == 0:
        return False
    return True
n = int(input())
print(check_consecutive_sum)
如果是奇数,肯定满足条件
如果输入的数值n为偶数用等差数列求和公式,求出(2x+k)(k+1)/2 == n  
若k+1为偶数,则2x+k为奇数,若k+1为奇数,则2x+k为偶数,所以必定有一奇数和一个偶数。 
我们把公式转换成(2x+k)(k+1) == 2n,因为2n是偶数,左边(2x+k)(k+1)一定有一个数值为偶数。
    等式两边不断提取因数2,如果2n可以不断提取因数2化成2^m,也就是2的幂,而等式的左边因为存在一个奇数,(2x+k)(k+1)是不能化成2^m。所以式子两边不可能相等。所以2的幂是不能转换成连续自然数相加的形式。

判定n是否为2的幂即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值