Python
数组
python没有严格意义上的数组,一般用list。但是开二维数组还是需要简单注意一下的。
首先是需要了解一下python的list的*
运算符,列表重复(List Repetition)。
注意:如果 n 是 0 或负数,结果会是一个空列表。
如果列表中的元素是可变对象(如列表、字典等),重复操作会导致共享引用问题。(备注一下,此时被复制的元素是整个list脱去一层后的那一层,比如[0]->0,[[0]] 才是 [0])
例如:
然后二维数组就有两种写法。
求n!中质数的出现次数
质数 $ p $ 在 $ n! $ 中的出现次数可以通过以下步骤计算:
- 初始化总和:设次数 $ v_p(n!) = 0 $。
- 逐次除以 $ p $ 的幂: 从 $ k = 1 $ 开始,依次计算 $ \left\lfloor \frac{n}{p^k} \right\rfloor $(即 $ n $ 除以 $ p^k $ 的商向下取整),并将结果累加到总和 $ v_p(n!) $ 中。
- 终止条件:当 $ p^k > n $ 时,后续项均为 0,停止计算。
公式表示:
$$ v_p(n!) = \sum_{k=1}^{\infty} \left\lfloor \frac{n}{p^k} \right\rfloor $$
原理:
- $ \left\lfloor \frac{n}{p} \right\rfloor $ 统计了 $ 1 \sim n $ 中至少含有一个 $ p $ 因子的数的个数。
- $ \left\lfloor \frac{n}{p^2} \right\rfloor $ 统计了至少含两个 $ p $ 因子的数的个数(每个额外贡献一次)。
- 以此类推,每次累加更高幂次的贡献,最终总和即为 $ p $ 在 $ n! $ 中的总次数。
示例:
$$
( n = 10 ),质数 ( p = 3 ) 时:
\left\lfloor \frac{10}{3} \right\rfloor + \left\lfloor \frac{10}{9} \right\rfloor = 3 + 1 = 4 $$ 验证:$ 10! = 3628800 = 2^8 \times 3^4 \times 5^2 \times 7 $,确实 $ 3$出现 4 次。
结论:通过逐次除以 $ p $ 的幂并求和,即可准确计算质数 $ p $ 在 $ n! $ 中的次数。
二维矩阵相等
sequence[start : end : step] # step 默认为 1 规则
start
: 起始索引(包含)end
: 结束索引(不包含)- 索引可以是负数,表示从末尾开始计数
- 省略规则:
[:]
- 复制整个序列[start:]
- 从start到末尾[:end]
- 从开始到end-1[:-1]
- 除了最后一个元素的所有元素
all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 True,如果是返回 True,否则返回 False。
堆
python只有小根堆,大根堆用负数实现,但是注意python的地板除的cpp的区别(//
表示“地板除”(floor division),即两个数相除后向下取整(取不大于结果的最大整数)而cpp的/
当操作数为整数时,执行的是截断除法(truncation division),即直接舍去小数部分(向零靠拢))
|
|