欧拉工程:首个500个约束的三角数

文章目录

一、三角数是什么

首先需要明白什么是三角数。三角数即正整数前n项和: 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78,..n(n+1)/2 ,从1+2+3+…+n谈起,例如:在建筑工地上堆积许多圆木条,从侧面看去它们堆积成三角形的样子。

二、使用步骤

1.定义函数计算三角数

代码如下:

def t(n):
    return (1 + n) * n /2

2.思路:

思路:暴力判断:利用循环判断三角数是否能将该数整除(判断值该三角数),若可以则相加。时间复杂度是O(n);改进:将循环改至判断到三角数的平方根(取整)+1时间复杂度为O(n**/2);其次明白怎样判断一个数约束的个数。

如果一个数不是素数是合数, 那么一定可以由两个自然数相乘得到, 其中一个大于或等于它的平方根,一个小于或等于它的平方根

利用这个方法我们只需呀判断平方根前的部分,如果是约数则+2即可。

3.代码:

n = 1
counter = 0 #计算约数个数

while counter <= 500:
    counter = 2 #1和t(n)
    n += 1
    for i in range(2,(int)(math.sqrt(t(n)))+1):
        if t(n)%i==0:
            counter+=2

print(int(t(n)))

总结

懂得如果一个数不是素数是合数, 那么一定可以由两个自然数相乘得到, 其中一个大于或等于它的平方根,一个小于或等于它的平方根之后时间复杂度大大降低,为O(n**1/2),效率加快不少

最后:如果有其他思路的小伙伴可以在评论区留言一起讨论。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值