• 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
  • 相关阅读:
    洛谷P2389 电脑班的裁员(区间DP)
    停更祭
    搜索 水题&&错误集锦
    模板——最小生成树prim算法&&向前星理解
    单源最短路dijkstra算法&&优化史
    模板——最小生成树kruskal算法+并查集数据结构
    卡常三连(快读快写+re)
    模板——STL队列
    起点
    《2016年十一月十三日周总结》
  • 原文地址:https://www.cnblogs.com/watertaro/p/12745387.html
Copyright © 2020-2023  润新知