前言
自守数也是一个很容易用编程解决的数学问题,不过,教材提到的一个点,值得深入研究。
问题
计算指定范围内的所有自守数
名词解释
自守数,指一个数平方结果的后几位,等于这个数本身。如 25×25=62525\times25=62525×25=625, 625625625的后两位等于乘数25,所以是一个自守数。
编程思路
- 很容易发现,一个数是几位数,那么就得截取乘积的后几位数,所以,得编写确定一个数位数的子函数
- 提取乘积的后几位,可以利用上一篇博客提取特定位数的方法
- 直接比较验证
实现代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date : 2019-04-06 12:40:29
# @Author : Promise (promise@mail.ustc.edu.cn)
# @Link : ${link}
# @Version : $Id$
import time
# 自守数,就是一个数平方结果的后几位,等于自身
# 编程思路:1)读取数是几位数 k
# 2)然后取余 10**k
# 编写判断位数的函数
def bitJudge(num):
temp = num
bit = 0
while temp > 0: # 至少是个位数
bit += 1
temp //= 10 # 减少一位
return bit
# 主函数
def findAutomorphic(maxLimit):
count = 0
for i in range(maxLimit):
bit_count = bitJudge(i)
lastBit = (i**2) % (10**bit_count) # 有几位就取余几位,如果是两位数,就取余 10^2 = 100
if lastBit == i:
print(