Croper 发表于 2020-2-1 17:17:12

再来个单行版def func321(n):               
    return sum(1&(i^(n*2//i)) for i in range(1,int(((8*n+1)**0.5+1)//2)) if n*2%i==0)

塔利班 发表于 2020-2-1 17:17:34

def f321(n):
    res=0
    N=2*n
    k=1
    while N>k**2:
      a,b=divmod(N,k)
      if not b and (a-k)%2:
            res+=1
      k+=1
    return res

zltzlt 发表于 2020-2-1 17:18:01

塔利班 发表于 2020-2-1 17:17


201 ms

冬雪雪冬 发表于 2020-2-1 17:21:19

zltzlt 发表于 2020-2-1 16:56
解答错误

输入:8


修改
def fun(n):
    i = 2
    count = 1
    while n >= i * (i + 1) // 2:
      if i % 2 !=0:
            if n % i == 0:
                count +=1
      else:
            x = 0
            while i * x + 1 <= n:
                if i * x + 1 == n:
                  count += 1
                  break
                x += 1

      i += 1
    return count

zltzlt 发表于 2020-2-1 17:22:03

冬雪雪冬 发表于 2020-2-1 17:21
修改

解答错误

输入:85
输出:6
预期结果:4

TJBEST 发表于 2020-2-1 17:22:35

不来花里胡哨的,简简单单挺好
def fun321(n):
    maxGate = (2*n)**(1/2)
    num = 1
    result = 0
    while num < maxGate:
      if (2*n) % num == 0:
            a = (2*n)//num - (num -1)
            if a % 2 ==0:
                result += 1
            else:
                pass
      else:
            pass
      num += 1
    return result

zltzlt 发表于 2020-2-1 17:23:21

TJBEST 发表于 2020-2-1 17:22
不来花里胡哨的,简简单单挺好

111 ms{:5_109:}

冬雪雪冬 发表于 2020-2-1 17:40:51

zltzlt 发表于 2020-2-1 17:22
解答错误

输入:85


def fun(n):
    i = 2
    count = 1
    while n >= i * (i + 1) // 2:
      if i % 2 !=0:
            if n % i == 0:
                count +=1
      else:
            if (n - i // 2) % i == 0:
                count+=1
      i += 1
    return count

zltzlt 发表于 2020-2-1 17:41:29

冬雪雪冬 发表于 2020-2-1 17:40


这下可以了,160 ms

TJBEST 发表于 2020-2-1 17:45:05

zltzlt 发表于 2020-2-1 17:23
111 ms

我有一个更快地,一会就发,思路比较清奇

TJBEST 发表于 2020-2-1 18:19:30

版主,我测了一下 这个极快 应该比其他鱼油得快一些。来测测吧{:5_109:}
import math
def fun321(n):
    def split(n):
      oushu = 1
      jishu = 1
      while n > 1:
            if n % 2 ==0:
                oushu = oushu * 2
                n = n // 2
            else:
                break
      jishu = n
      return (jishu,oushu)
    def yueshu(n):
      res = []
      index = 1
      gate =math.floor(n ** (1/2))
      while index < gate:
            if n % index == 0:
                res.append(index)
                res.append(n//index)
            else:
                pass
            index += 1
      if n % gate==0:
            res.append(gate)
      return res
      
    maxGate = (2*n)**(1/2)
    jishu,oushu = split(2*n)
    jiyueshu = yueshu(jishu)
    result = 0
    for each in jiyueshu:
      if each < maxGate:
            result += 1
            if oushu * each < maxGate:
                result += 1
            else:
                pass
      else:
            pass
         
    return result

fan1993423 发表于 2020-2-1 22:55:28

先来个比较慢的
from sympy import solve
from sympy.abc import x
def fun321(n):
    return sum()

fan1993423 发表于 2020-2-1 22:59:27

本帖最后由 fan1993423 于 2020-2-1 23:01 编辑


def fun321(n):
    return sum()
这个好像要快点

zltzlt 发表于 2020-2-3 14:53:50

TJBEST 发表于 2020-2-1 18:19
版主,我测了一下 这个极快 应该比其他鱼油得快一些。来测测吧

解答错误

输入:15
输出:3
预期结果:4

zltzlt 发表于 2020-2-3 14:54:19

Croper 发表于 2020-2-1 17:17
再来个单行版

大神{:10_277:}

zltzlt 发表于 2020-2-3 14:54:39

fan1993423 发表于 2020-2-1 22:59
这个好像要快点

220 ms

zltzlt 发表于 2020-2-3 14:54:56

fan1993423 发表于 2020-2-1 22:55
先来个比较慢的

不能使用第三方库

William4869 发表于 2020-2-3 15:40:49

def f321(x):
    num=1
    for i in range(2,x//2+1):
      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):
                num+=1
    return num

print(f321(8500000))

之前怎么没看到这题。。我还有币吗

zltzlt 发表于 2020-2-3 15:42:34

William4869 发表于 2020-2-3 15:40
def f321(x):
    num=1
    for i in range(2,x//2+1):


解答错误

输入:3
输出:1
预期结果:2

fan1993423 发表于 2020-2-3 15:47:31

zltzlt 发表于 2020-2-3 14:54
不能使用第三方库

sympy是第三方库吗?我以为是自带的库
页: 1 [2] 3
查看完整版本: Python:每日一题 321