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
posted @ 2019-11-12 16:15  水里的芋头  阅读(1675)  评论(0编辑  收藏  举报