lt

  • 关注
  • 短消息
  • 送银子
文章
356
评论
1557
推荐
247
收藏
3
社区会龄
8 年
个人网站
--
个人简介
还没有输入个人简介……
  • lt 推荐

    欧拉计划699:三脚数

    Triffle Numbers Problem 699 Let σ(n) be the sum of all the divisors of the positive integer n, for example: σ(10)=1+2+5+10=18. Define T(N…...

  • lt 推荐

    欧拉计划621:把整数表示为三角数之和

    Expressing an integer as the sum of triangular numbers Problem 621 Gauss famously proved that every positive integer can be expressed as …...

  • lt 推荐

    欧拉计划622:洗牌

    一副牌被分成两等分,上半叠在左手,下半叠在右手。接下来,卡被完全交错,右半部的最上卡正好插在左半部的最上卡之后,右半部的第二张卡正好插在左半部的第二张卡之后,等等(注意这个过程保留了牌组上下卡的位置) 令s(n)是大小为n的牌组恢复其原始配置所需的最小连续重复洗牌次数,其中n是…...

  • lt 推荐

    欧拉计划698:123数

    我们定义123数如下: -1是最小的123数。 -以10进制表示时,只显示数字“ 1”,“ 2”和“ 3”,而且它们出现的次数也是123数。 所以,2是一个123数,因为它由1个数字“ 2”组成,而1是一个123数。所以,33也为123数,因为它由2个数字“ 3”组成,而2…...

  • lt 推荐

    欧拉计划697:随机衰减序列

    问题 697 给定一个固定的实数C,通过以下随机过程定义随机序列(Ⅹn)n>=0: Ⅹ0=C(概率 1)。 对于n>0,Ⅹn=UnⅩn-1其中Un是零和一之间随机选择的实数,均匀且独立于所有以前的选择(Um)m … ...

评论了

  • 今年 01-27 17:49

    利用三角数的性质判定,减少一次查找,但速度更慢 def test(n): a=n*8+1 if int(math.sqrt(a))**2==a: return 1 else: return 0 def f6(n): t=[i*(i+1)//2 for i in range(1+int(math.sqrt(n*8+1)/2-1/2))] le=len(t) c=0 for i in range(le): for j in range(i,le): if t[i]+t[j]+t[j]>n:break tj,tk=t[j],n-t[i]-t[j] if test(tk)==1: if i ==j: if tj==tk: c+=1 else: c+=3 else: if tj==tk: c+=3 else: c+=6 return c

  • 今年 01-27 16:52

    N乘以(N+1)除以2的商是N三角数。 一个奇平方数减1是除以8是一个三角数。 [(2K+1)^2-1]/8=T (T三角数)。 通项公式 {[(2K+1)2^n]^2-(2^N)^2)}/8(2^n)^2=T 三角数乘以9加上1仍是三角数。 三角数二倍平方根取整是这个三角数的序数。 三角数的位数和只有1,3,6,9四种。 位数和是1的三角数,它的序数位数和只有1,4,7三种。 序数位数和是1的三角数减1除以9仍是三角数,它的序数位数和是全面的。 序数位数和是4三角数减1除以9,仍是位数和1的三角数。 序数位数和是7的三角数,减1除以9,位数和是3,6,9的三角数。 位数和是3的三角数,序数位数和只有2与6二种。 序数位数和是2的三角数,加上6 除以9,减去序数除以9的满入数(上取整,下同),仍是位数和3,6,9的三角数。 序数位数和是6的三角数,减去3除以9,加上序数除以9的满入数,仍是位数和3,6,9的三角数。 位数和是6的三角数,序数位数和只有3与5二种。 序数位数和是3的三角数,减去6除以9,加上序数除以9的满入数,仍是位数和1的三角数。 序数位数和是5的三角数,加上3除以9,减去序数除以9的满入数,仍是位数和1的三角数。

  • 今年 01-27 12:37

    https://baike.baidu.com/item/%E8%B4%B9%E9%A9%AC%E5%A4%9A%E8%BE%B9%E5%BD%A2%E6%95%B0%E5%AE%9A%E7%90%86/9459912 费马多边形数定理是一个定律,定义为每一个正整数都可以表示为最多n个n边形数的和。也就是说,每一个正整数一定可以表示为不超过三个的三角形数之和、不超过四个的平方数之和、不超过五个的五边形数之和,依此类推。

  • 今年 01-26 20:02

    去重复的版本,节省1半时间 def f3(n): t=[i*(i+1)//2 for i in range(1+int(math.sqrt(n*8+1)/2-1/2))] le=len(t) c=0 for i in range(le): for j in range(i,le): if t[i]+t[j]>=n:break lft=bisect.bisect_left(t,n-t[i]-t[j],j ) if lft>=0 and bisect.bisect_right(t,n-t[i]-t[j] )==lft+1: if i ==j: if j==lft: c+=1 else: c+=3 else: if j==lft: c+=3 else: c+=6 return c >>> t=time.time();f3(1000000);print(time.time()-t) 2106 2.3600032329559326

  • 今年 01-26 08:52

    不使用推导式的更快的版本,二分查找 import bisect def f2(n): t=[i*(i+1)//2 for i in range(1+int(math.sqrt(n*8+1)/2-1/2))] le=len(t) c=0 for i in range(le): for j in range(le): #print(i,j,t[i],t[j]) if t[i]+t[j]>n:break lft=bisect.bisect_left(t,n-t[i]-t[j] ) if lft>=0 and bisect.bisect_right(t,n-t[i]-t[j] )==lft+1: c+=1 #if n-t[i]-t[j] in t:c+=1 return c >>> t=time.time();f1(100000);print(time.time()-t) 834 2.2152040004730225 >>> t=time.time();f2(100000);print(time.time()-t) 834 0.45240068435668945 >>> t=time.time();f2(1000000);print(time.time()-t) 2106 4.617608070373535