【趣味学算法】12_自守数

注: 本系列仅为个人学习笔记,学习内容为《算法小讲堂》(视频传送门),通俗易懂适合编程入门小白,需要具备python语言基础,本人小白,如内容有误感谢您的批评指正

自守数是指一个数的平方的尾数等于该数自身的自然数,例如:52=25, 252=625,762=5776

那么要求100000以内的自守数该怎么实现呢?

一个简单笨重的思路就是对判断对10、100、1000、10000,100000求余判断是否与该数相等,代码实现如下:

print('100000以内的自守数为:')
for n in range(100000):
    if n*n%10==n:
        print(n)
    elif n*n%100==n:
        print(n)
    elif n*n%1000==n:
        print(n)
    elif n*n%10000==n:
        print(n)
    elif n*n%100000==n:
        print(n)

以上代码就是一一列举相应位数的可能进行判断,那么换个思路我们可以直接通过该数的位数来确定幂的次数

print('100000以内的自守数为:')
for n in range(100000):
    if n*n%10**len(str(n))==n:
        print(n)

输出

100000以内的自守数为:
0
1
5
6
25
76
376
625
9376
90625

更进阶的写法就是通过列表解析式一行代码就能实现啦

print([n for n in range(100000) if (n*n%10**len(str(n)))==n])

输出

[0, 1, 5, 6, 25, 76, 376, 625, 9376, 90625]
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值