【数学1】基础数学问题
最大公约数gcd = math.gcd(a,b)
注意这个gcd支持传入多参数,有两种写法,建议用星号,因为reduce如果a是空数组会报错。
注意gcd(a,0)=a,即任意数和0的gcd都是自己,参照循环相减法。
gcd(*a)
是Python中的一种用法,它可以计算传递给函数gcd()
的可变数量的参数的最大公约数。这里*a
表示将列表a
解包成函数的参数,使得gcd()
函数可以接受任意数量的参数。
from math import gcd
a = [12, 18, 24, 36]
result = gcd(*a)
print("列表中所有元素的最大公约数为:", result)
最小公倍数lcm = math.lcm(a,b)
写法和gcd类似。
from math import lcm
a = [12, 18, 24, 36]
result = lcm(*a)
print("列表中所有元素的最小公倍数为:", result)
质数筛法:埃氏筛O(nlgn)、线性筛O(n)(欧拉筛)
n = 10**3 # 代求的范围中的最大值
k = 0
s = [True for i in range(n)] # 首先默认所有数都是质数
z = []
for i in range(2,n):
if s[i]: # 判断是否为质数,如果没有被标记过,就是质数
k+=1
z.append(i) #添加质数
for j in range(i+i,n,i): # 将是指数的倍数的数都改为False
s[j] = False
print(k) # 个数
print(z) # 质数
杨辉三角
定义法
思路:
从第三行开始,每一行的首尾都是1,中间部分每个数字等于上一行的左右两个数字之和。先定义每一行的第一个数字,然后在利用规则对中间部分进行运算,最后再添加最后一个元素。
# 用户输入要打印的行数
n = eval(input("输入要打印的行数:"))
# 创建一个二维列表triangle,用于存储杨辉三角的每一行。前两行已经给出。
triangle = [[1], [1, 1]]
# 使用两层循环生成剩余的行数
for i in range(2, n): # 外层循环遍历从第三行到第n行
pre = triangle[i-1] # 上一行
cul = [1] # 定义每行第一个元素
for j in range(i-1): # 内层循环用于计算当前行的元素
cul.append(pre[j]+pre[j+1]) # 每个数字等于上一行的左右两个数字之和,并将结果添加到当前行中
cul.append(1) # 添加每行最后一个元素
triangle.append(cul)
# 按普通输出格式打印生成的杨辉三角
print("普通输出:{}".format(triangle))
# 再次遍历生成的杨辉三角,按等边三角形格式输出
for i in range(n):
s = " "*(n-i-1)
for j in triangle[i]:
s = s + str(j)+" "
print(s)
幂运算
快速幂
def quick_count(a, b):
sum = 1
while b != 0:
if b & 1:
sum = sum * a % p
b >>= 1
a *= a # 注意是x自身,容易写成x^2
return sum
eg:
【题目描述】 给定 b 、 p 、 k ,求 ( b p ) mod k 。其中 2 ≤ b , p , k ≤ 10 9 。 【输入描述】 输入 3 个整数 b 、 p 、 k 。 【输出描述】 输出 ( b的 p次方 ) mod k 的值。def fastPow(a, n, mod):
ans = 1
while n:
if n & 1:
ans = ans * a % mod
a = a * a % mod
n >>= 1
return ans
b, p, k = map(int, input().split())
print(fastPow(b, p, k))
##int:2 10000000 1000000007
##out:255718402
矩阵乘法
( 1 )一个数 k 乘矩阵 A ,就是把 k 乘以矩阵的每个元素,记为 k A 。 ( 2 )两个矩阵 A 、 B 相乘,要求 A 的列数等于 B 的行数,设 A 是 m × n 的矩阵, B 是 n × u 的矩阵,那么乘积 C = AB 是 m × u 的矩阵。定义矩阵乘法 C = AB 。for(int i=1;i<=m;i++) //注:i、j、k 的先后顺序不重要,因为对于 c[][]来说都一样
for(int j=1;j<=u;j++)
for(int k=1;k<=n;k++)
c[i][j] += a[i][k] * b[k][j]);
标签:第十一天,triangle,gcd,Python,质数,矩阵,range,print,题库
From: https://blog.csdn.net/2301_76665528/article/details/137542519