# 矩阵乘法
def mul(A,B):
N,M=len(A),len(A[0])#行数,列数
_M,K=len(B),len(B[0])
if M!=_M:
return None
#答案是N*K的
C=[[0]*K for _ in range(N)]
for i in range(N):
for j in range(K):
for k in range(M):
C[i][j]+=A[i][k]*B[k][j]
return C
# 读入矩阵
def read(A,n):
#n代表行数
for _ in range(n):
A.append(list(map(int,input().split())))
# 打印矩阵
def write(A):
for x in A:
print(' '.join(map(str,x)))
A=[]
B=[]
N,M,K=map(int,input().split())
read(A,N)
read(B,M)
C=mul(A,B)
write(C)
基础数论
整除的传递性
因为m|(a-b)即k*m=a-b,a=k*m+b,两边同时对m求模
a % m = (k*m+b) % m,即a % m = k + b % m,记为ab(mod m)
GCD和LCM
GCD和LCM的关系:
质数
python复制代码
def is_prime(n):
if n<=1:
return False
m=int(n**0.5)
for i in range(2,m+1):
if x%i==0:
return False
return True
#疑似质数
n=int(input())
ans=0
for i in range(1,n+1):
#逐个枚举[1,n]
#判断数字i的数位之和是否为质数
x=i
cnt=0
while x!=0:
cnt+=x%10
x//=10
if is_prime(cnt):
ans+=1
print(ans)
质数筛选:
python复制代码
def get_prime(n):
#求n以内所有的质数
#vis表示是否删除
vis=[0]*(n+1)
vis[0]=vis[1]=1
#质数列表
prime=[]
#从小到大,找到第一个未标记的数字,就是质数
for i in range(2,n+1):
if vis[i]==0:
prime.append(i)
#从2倍的i开始,删除它是质数的可能性
for j in range(i+i,n+1,i):
vis[j]=1
return prime
#打印100以内的素数
print(get_prime(100))