矩阵乘法
蓝桥1550
import os
import sys
N, M, K = map(int, input().split())
num_1 = []
num_2 = []
ans = [[0] * K for _ in range(N)] # 结果矩阵的维度为 N 行 K 列
for _ in range(N):
num_1.append(list(map(int, input().split())))
for _ in range(M):
num_2.append(list(map(int, input().split())))
# 矩阵乘法计算
for i in range(N):
for j in range(K):
for k in range(M):
ans[i][j] += num_1[i][k] * num_2[k][j]
# 输出结果
for i in range(N):
for j in range(K):
print(ans[i][j], end=' ') # 打印每个元素,以空格隔开
print() # 打印换行符,进行下一行的输出
def read(A, n):
for _ in range(n):
A.append(list(map(int,input().split())))
def output(A):
for x in A:
print(' '.join(map(str, x)))
def mul(A, B):
N, M = len(A), len(A[0])
_M, K = len(B), len(B[0])
if M != _M:
return None
C = [[0] * K for i 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
A = []
B = []
N, M, K = map(int, input().split())
read(A, N)
read(B, M)
C = mul(A, B)
output(C)
gcd和lcm
向上取整也可以用math.ceil
import math
def lcm(a, b):
return (a * b) // math.gcd(a, b)
gcd直接调用就行
素数朴素判定
def is_prime(x):
if x <= 1:
return False
m = int(x ** 0.5)
for i in range(2, m + 1):
if x % i == 0:
return False
return True
蓝桥1557
import os
import sys
# 请在此输入您的代码
def get_prime(n):
vis = [0] * (n + 1)
prime = []
for i in range(2, n + 1):
if vis[i] == 0:
prime.append(i)
for j in range(2 * i, n + 1, i):
vis[j] = 1
return prime
N = int(input())
prime = get_prime(N - 1)
print(*prime)
print(len(prime))
唯一分解定理
蓝桥1559
import os
import sys
# 请在此输入您的代码
a, b = map(int, input().split())
# 唯一分解定理
# f(n)返回n的质因子列表
def f(n):
factor = []
for i in range(2, n + 1):
# 只要能够整除,我就不断地除
while n % i == 0:
n //= i
factor.append(i)
if n == 1:
break
return factor
for i in range(a, b + 1):
factor = f(i)
print("{}=".format(i), end='')
print(*factor, sep='*')
蓝桥1020
import os
import sys
# 请在此输入您的代码
# 每个数进行质因子分解
# 然后累计求出阶乘地质因子分解
from collections import Counter # 计数器,统计一个列表出现的次数
def f(n):
factor = []
for i in range(2, n + 1):
# 只要能够整除,我就不断地除
while n % i == 0:
n //= i
factor.append(i)
if n == 1:
break
return factor
all_factor = []
for i in range(2, 101):
all_factor += f(i)
all_factor = Counter(all_factor)
ans = 1
for k, v in all_factor.items():
ans *= v + 1
print(ans)
快速幂
模板1:
def ksm(a, b, c):
if b == 0:
return 1
if b == 1:
return a % c
ans = ksm(a, b // 2, c)
ans = ans * a % c
if b % 2 == 1:
ans = ans * a % c
return ans
b, p, k = map(int, input().split())
print(ksm(b,p,k))
模板2:
def ksm(a, b, c):
ans = 1 % c
while b:
if b % 2 == 1:
ans = ans * a % c
b //= 2
a = a * a % c
return ans
b, p, k = map(int, input().split())
print(ksm(b,p,k))
矩阵快速幂
def ksm(A, b):
N = len(A)
ans = [[1 if i == j else 0 for j in range(N)] for i in range(N)]
while b:
if b % 2 == 1:
ans = mul(ans, A)
b //= 2
A = mul(A, A)
return ans
蓝桥1511
import os
import sys
def read(A, n):
for _ in range(n):
A.append(list(map(int,input().split())))
def output(A):
for x in A:
print(' '.join(map(str, x)))
def mul(A, B):
N, M = len(A), len(A[0])
_M, K = len(B), len(B[0])
if M != _M:
return None
C = [[0] * K for i 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 ksm(A, b):
N = len(A)
ans = [[1 if i == j else 0 for j in range(N)] for i in range(N)]
while b:
if b % 2 == 1:
ans = mul(ans, A)
b //= 2
A = mul(A, A)
return ans
N, M = map(int, input().split())
A = []
read(A, N)
output(ksm(A,M))