鱼C论坛

 找回密码
 立即注册
123
返回列表 发新帖
楼主: zltzlt

[已解决]Python:每日一题 321

[复制链接]
 楼主| 发表于 2020-2-3 15:47:50 | 显示全部楼层
fan1993423 发表于 2020-2-3 15:47
sympy是第三方库吗?我以为是自带的库

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-3 15:48:29 | 显示全部楼层

另外我316那个递归的答案效率咋样,能否帮我测一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-3 15:48:35 | 显示全部楼层
def f321(x):
    num=1
    for i in range(2,x//2+2):
        if i%2:
            if (x%i==0)and(x/i>=i//2+1):
                num+=1
        else:
            if (x%(i/2)==0)and(x%i!=0)and(x//i>=i-1):
                num+=1
    return num

print(f321(8500000))

我又来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-3 16:07:46 | 显示全部楼层
William4869 发表于 2020-2-3 15:48
def f321(x):
    num=1
    for i in range(2,x//2+2):

import math
def f321(x):
    num=1
    for i in range(2,int(math.sqrt(x))*2+1):
    #for i in range(2,x//2+2):
        if i%2:
            if (x%i==0)and(x/i>=i//2+1):
                num+=1
        else:
            if (x%(i/2)==0)and(x%i!=0)and(x//i>=i/2):
                num+=1
    return num

上一个不用测了,有点问题,再来
这样快一点,,但只测了几个,,不知道能不能过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-3 20:13:27 | 显示全部楼层
  1. def fun321(n):
  2.     count = 1
  3.     i = 2
  4.     if n == 1 or n == 2:
  5.         return 1
  6.     if n == 3:
  7.         return 2
  8.     while (n/i) >= 2:
  9.         if i%2 == 0 and (n/i) % 1 == 0.5 and n/i-i/2 > 0:
  10.             count += 1
  11.         elif i%2 != 0 and (n/i) % 1 == 0 and n/i-i/2 > 0:
  12.             count += 1
  13.         i += 1
  14.     return count
复制代码


为啥我今天才看到这题

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
zltzlt + 4 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-3 20:43:17 | 显示全部楼层
zltzlt 发表于 2020-2-3 14:53
解答错误

输入:15

修改完成,之前犯了个错误
  1. import math
  2. def fun321(n):
  3.     def split(n):
  4.         oushu = 1
  5.         jishu = 1
  6.         while n > 1:
  7.             if n % 2 ==0:
  8.                 oushu = oushu * 2
  9.                 n = n // 2
  10.             else:
  11.                 break
  12.         jishu = n
  13.         return (jishu,oushu)
  14.     def yueshu(n):
  15.         res = []
  16.         index = 1
  17.         gate =math.floor(n ** (1/2))
  18.         while index <= gate:
  19.             if n % index == 0:
  20.                 res.append(index)
  21.                 res.append(n//index)
  22.             else:
  23.                 pass
  24.             index += 1
  25.         if n % gate==0 and n//gate ==gate:
  26.             res.pop()
  27.         return res
  28.         
  29.     maxGate = (2*n)**(1/2)
  30.     jishu,oushu = split(2*n)
  31.     jiyueshu = yueshu(jishu)
  32.     result = 0
  33.     for each in jiyueshu:
  34.         if each < maxGate:
  35.             result += 1
  36.             if oushu * each < maxGate:
  37.                 result += 1
  38.             else:
  39.                 pass
  40.         else:
  41.             pass
  42.            
  43.     return result
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-4 00:01:44 | 显示全部楼层
from math import sqrt
n=int(input('请输入整数:'))
def function321(n):
    L=[]
    while 1:
        for i in range(2,int(sqrt(n)+1)):
            if n%i==0:
                L.append(i)
                n=int(n/i)
                break
        else:
            L.append(n)
            break
   
    C={}
    for i in L:
        if i not in C:
            C[i]=1
        else:
            C[i]+=1
   
    L=1
    for i in C.keys():
        if i!=2:
            L*=C[i]+1
    return L
print(function321(n))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-5 16:41:45 | 显示全部楼层
546623863 发表于 2020-2-3 20:13
为啥我今天才看到这题

输入 8500000 超时
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-15 12:41:35 | 显示全部楼层
  1. def fun321(x):
  2.     result = [[x]]
  3.     for i in range(2,x):
  4.         if sum([n for n in range(i)]) > x:
  5.             break
  6.         for j in range(1,x-i+1):
  7.             if j*i+sum([n for n in range(i)]) == x:
  8.                 result.append([n for n in range(j,j+i)])
  9.                 break
  10.             if j*i+sum([n for n in range(i)]) > x:
  11.                 break
  12.     return result
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-13 13:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表