完美立方数
费马大定理断言,当整数 n > 2时,关于 a,b,c 的方程 an = bn + cn 没有正整数解。
该定理被提出来后,历经三百多年,经历多人猜想辩证,最终在 1995 年被英国数学家安德鲁.怀尔斯证明。
当然,可以找到大于 1 的 4 个整数满足完美立方等式:a3 = b3 + c3 + d3 (例如 123 = 63 + 83 + 103)
编写一个程序,对于任意给定的正整数 N(N<=100),寻找所有的四元组(a,b,c,d),满足 a3 = b3 + c3 + d**3
其中 1 < a,b,c,d <=N
from math import *
N=int(input())
for a in range (N+1):
for b in range (2,a):
for c in range (b,a):
for d in range (c,a):
if pow(a,3)==pow(b,3)+pow(c,3)+pow(d,3):
print("Cube = {:.0f},Triple = ({:.0f},{:.0f},{:.0f})".format(a,b,c,d))
身份证号批量升位
我国自1999年10月1日身份证号码由15位改成18位,1999年以前出生的人持有的旧身份证号码均为15位,1999年10月1日以后出生的人获得的身份证号都是18位。
读取附件中文本文件id15.txt,用户输入一个正整数 n (n<=30),将其中的前 n 行中的15位身份证号升到18位并输出,身份证号升位规则如下:
第一步,在原十五位数身份证的第六位数后面插入19 (1905年1月1日以后出生),这样身份证号码即为十七位数;
第二步,按照国家规定的统一公式计算出第十八位数,作为校验码放在第二代身份证的尾号。
校验码计算方法:将身份证前十七位数分别乘以不同系数并求和
S = Sum(Ai * Wi)
Ai:表示第i位置上的身份证号码数字值, i = 0, … , 16
Wi:表示第i位置上的加权因子,Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
S对11取模得到余数0-10,对应的校验码如下:
余数 Y: 0 1 2 3 4 5 6 7 8 9 10
校验码: 1 0 X 9 8 7 6 5 4 3 2
def id15218(id15):
a = id15
id15 = a[ :6] + '19' + a[6:]
Wi = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
s = 0
for i in range(17):
s = s + int(id15[i]) * int(Wi[i])
Y = str(s % 11)
if int(Y) < 10:
before = '0 1 2 3 4 5 6 7 8 9'
after = '1 0 X 9 8 7 6 5 4 3'
table = ''.maketrans(before,after)
Y =Y.translate(table)
else:
Y = '2'
id18 = id15[:17] + Y + id15[17:]
id18 = id18.replace(id18[18],' '*1)
return id18
n = int(input())
with open('id15.txt','r',encoding='utf-8') as file:
for i in range(n):
line = file.readline() # line 的内容是文件中的一行,字符串类型