1 #-*-coding:utf8-*- 2 3 import math 4 #获取用户输入的正整数 5 numInput = int(input("Please input a digit:")) 6 7 #使用函数判断此正整数是否为连续正整数之和 8 #若可以则返回Yes,若不可以则返回No 9 ''' 10 思路: 11 1、奇数肯定可以至少被俩个连续整数相加得到 12 2、若偶数连续除以2,最后得到结果为1,则可以被连续整数相加,若为0则不可以 13 ''' 14 15 def judgeNum(num): 16 #计算num的二次开方,并向上取整 17 numSqrt = math.ceil((math.sqrt(num))) 18 19 #设定默认正整数不可以为连续整数之和,即‘No’ 20 resultYesNo = 'No' 21 22 #循环计算从2...numSqrt中每个整数,判断是否存在除2余数为1的情况 23 for i in range(2,numSqrt+1): 24 #判断是否被偶数整除 25 if num % 2 == 1: 26 resultYesNo = 'Yes' 27 break 28 else: 29 num = num / 2 30 31 return resultYesNo 32 33 print(judgeNum(numInput))
也可以使用math包中的log函数直接实现
#-*-coding:utf8-*- import math #获取用户输入的正整数 numInput = int(input("Please input a digit:")) #使用函数判断此正整数是否为连续正整数之和 #若可以则返回Yes,若不可以则返回No ''' 思路: 奇数都可以拆解成至少俩个整数之和 偶数可以类似奇数算法,若除以2最后得到为0,则不可以为任意俩个连续整数之和 ''' resultYesNo = 'Yes' if math.log(numInput,2) == math.floor(math.log(numInput,2)): resultYesNo = 'No' print(resultYesNo)
num = num / 2