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