永恒的蓝色梦想 发表于 2020-5-15 12:46:17

本帖最后由 永恒的蓝色梦想 于 2020-5-15 12:51 编辑

March2615 发表于 2020-5-15 10:59
感谢指出
1. n,k不互质是否就指n和k有大于1的公因子?那有什么问题呢?我暂时没想到,你可以告诉我一下
...

2.错误,是 k 分解质因数的结果只有 2 和 5,n/k 才是有限小数。举例:30。

March2615 发表于 2020-5-15 13:06:14

永恒的蓝色梦想 发表于 2020-5-15 12:46
2.错误,是 k 分解质因数的结果只有 2 和 5,n/k 才是有限小数。举例:30。

OK 我的 这就去改{:10_266:}

永恒的蓝色梦想 发表于 2020-5-15 13:08:27

咸鱼c1 发表于 2020-5-13 23:22
刚刚开始学python,不知道做的对不对

做的没什么问题,但是不要用 1e6 1e7 什么的,浮点数有误差。

rsj0315 发表于 2020-5-15 13:13:28

占楼看看

ouyunfu 发表于 2020-5-15 21:13:42

from fractions import Fraction
from math import gcd
def S(a,b):
    def m(n):
      k = 2
      while n/(k+1)*(k/(k+1))**k>1:
            k += 1
      return
   
    def judge_num(in_num):
      l = []
      while in_num > 1:
            for i in range(2, in_num+1):
                if in_num % i == 0:
                  in_num = in_num // i
                  l.append(str(i))
            break
      for x in l:
            if x!='2' and x!='5':
                return False
            else:
                return True
    def inf(x,y):
      res=Fraction(x,y)
      fm=res.denominator
      if judge_num(fm):
            return False
      else: return True
    def d(n):
      if inf(m(n),m(n)):
            return "%.6f" % (m(n)/m(n))
      else:
            return "%.7f" % (-m(n)/m(n))
            
    L=
    print(L)
    return sum()

print(S(5,10))

永恒的蓝色梦想 发表于 2020-5-15 21:24:48

ouyunfu 发表于 2020-5-15 21:13


已经结帖了{:10_277:}
不过为什么你要转字符串呢{:10_277:}

阴阳神万物主 发表于 2020-5-25 17:21:49

“将 正整数 那平分为 k 份” 的这个 k 应该是个整数,对吧?就我的常识判断来说,份是个整数量词。
那么当 n = 4 的时候,取得 m(n) 的 k 有两个,1 和 2,此时 m(n) 为 4.0 ,若 k 取 1 则 d(n) 为 -1,若 k 取 2 则 d(n) 为 -65536,这种情况怎么算呢?
是都加上,还是 1 个 n 只对应一个 d(n)?若是后者,这 k 怎么取?
我还得研究研究 a^(a^(a^(a^(...)))) 的末尾的规律,研究不出来的话,这题我就做不了,用时会特别长。一个月没来做题,难度居然上涨的这么夸张吗?!

阴阳神万物主 发表于 2020-5-25 17:23:19

永恒的蓝色梦想 发表于 2020-5-15 21:24
已经结帖了
不过为什么你要转字符串呢

惊!结贴是什么?

永恒的蓝色梦想 发表于 2020-5-25 17:44:55

阴阳神万物主 发表于 2020-5-25 17:21
“将 正整数 那平分为 k 份” 的这个 k 应该是个整数,对吧?就我的常识判断来说,份是个整数量词。
那么 ...

“将 正整数 那平分为 k 份” 的这个 k 应该是个整数,对吧?就我的常识判断来说,份是个整数量词。
那么当 n = 4 的时候,取得 m(n) 的 k 有两个,1 和 2,此时 m(n) 为 4.0 ,若 k 取 1 则 d(n) 为 -1,若 k 取 2 则 d(n) 为 -65536,这种情况怎么算呢?
是都加上,还是 1 个 n 只对应一个 d(n)?若是后者,这 k 怎么取?我又漏了 a>=5 这个条件……


直接跟你说了末尾规律吧,快速幂取模。

阴阳神万物主 发表于 2020-5-26 00:14:08

难度评级:中等偏上
要素分析:数论
代码:def S(a,b,which=0):#which这个参数是我对于题目理解在一点细节处理上的的分歧。
    e = 2.71828459
    def gcb(c,d):#辗转相除法
      while d:c,d = d,c%d
      return c
    def m(n):
      l = int(n/e)
      r = l + 1
      k = l if (n/l)**l > (n/r)**r else r
      k1 = k/gcd(n,k)
      while (g:=k1/5)==int(g):k1=g
      while (g:=k1/2)==int(g):k1=g
      lim = int(k1 == 1)+5
      return (k,lim)
    def f(k,n,l):
      m = 10**l
      u = k
      for i in range(n):
            down = k
            uns = 1
            while u:#楼主提示的快速幂取模
                if u&1:uns = (uns*d)%m
                down = (down**2)%m
                u >>= 1
            u = uns
      return u
    def d(n):
      k,lim = m(n)
      get = f(k,n,lim+1)
      if which and lim-5:get*=-1
      elif not which:
            l = 10**lim
            if lim&1:get*=(-1**int(bool(get%l)))
      return get
    res = 0
    for n in range(a,b+1):
      res += d(n)
    return res
备注:which 参数是一个 bool 值,为命题 {m(n)为有限小数时,d(n)取值一定为负} 的真假性。
我理解的分歧是d(n)=-f(k,n) 的最后 7 位
意思是 d(n)=[ -f(k,n) ] 的最后 7 位
还是 d(n)=-
例:若 f(k,n) = 123456789 ,则
3456789 = [-123456789] 的最后七位
-3456789 =-

zwhe 发表于 2020-5-26 15:42:28

{:7_125:}

a873527356 发表于 2020-12-10 20:17:06

怎么做题?

qq1151985918 发表于 2021-2-4 00:14:11

qq1151985918 发表于 2021-6-21 16:05:58

{:9_241:}

一块钱赫赫 发表于 2021-8-9 10:21:46

找答案{:10_249:}

stefanie0511 发表于 2021-8-12 17:36:48

{:5_103:}
页: 1 2 [3]
查看完整版本: Python:每日一题 392