python之判斷是否為連續正整數之和


 

 

 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM