随笔分类 - 算法-数学
acwing 基础课数学 3刷
摘要:c++ AcWing 890. 能被整除的数 /* * 问题描述: * AcWing 890. 能被整除的数 * 给定一个整数 n 和 m 个不同的质数 p1,p2,…,pm。 * 请你求出 1∼n 中能被 p1,p2,…,pm 中的至少一个数整除的整数有多少个。 * 输入格式 * 第一行包含整数
阅读全文
摘要:C++ AcWing 889. 满足条件的01序列 /* * 问题描述: * 给定 n 个 0 和 n 个 1,它们将按照某种顺序排成长度为 2n 的序列, * 求它们能排列成的所有序列中,能够满足任意前缀序列中 0 的个数都不少于 1 的个数的序列有多少个。 * 输出的答案对 109+7 取模。
阅读全文
摘要:C++ AcWing 888. 求组合数 IV /* * 题目描述: * AcWing 888. 求组合数 IV * 输入 a, b,求 C(a, b) 的值。 * 注意结果可能很大,需要使用高精度计算。 * * 输入格式 * 共一行,包含两个整数 a 和 b。 * * 输出格式 * 共一行,输出
阅读全文
摘要:c++ AcWing 887. 求组合数 III /* * 题目描述: * AcWing 887. 求组合数 III * 给定 n 组询问,每组询问给定三个整数 a,b,p,其中 p 是质数,请你输出 C(a, b) mod p 的值。 * 输入格式: * 第一行包含整数 n。 * 接下来 n 行,
阅读全文
摘要:c++ AcWing 894. 拆分-Nim游戏 /* * 题目描述: * AcWing 894. 拆分-Nim游戏: * 给定 n 堆石子,两位玩家轮流操作,每次操作可以取走其中的一堆石子, * 然后放入两堆规模更小的石子(**新堆规模可以为 0,且两个新堆的石子总数可以大于取走的那堆石子数**)
阅读全文
摘要:c++ AcWing 893. 集合-Nim游戏 /* * 题目描述: * Acwing 893. 集合-Nim游戏: * 给定 n 堆石子以及一个由 k 个不同正整数构成的数字集合 S。 * 现在有两位玩家轮流操作,每次操作可以从任意一堆石子中拿取石子,每次拿取的石子数量必须包含于集合 S,最后无
阅读全文
摘要:c++ AcWing 892. 台阶-Nim游戏 /* * 题目描述: * Acwing 892. 台阶-Nim游戏: * 现在,有一个 n 级台阶的楼梯,每级台阶上都有若干个石子,其中第 i 级台阶上有 ai 个石子(i≥1)。 * 两位玩家轮流操作,每次操作可以从任意一级台阶上拿若干个石子放到下
阅读全文
摘要:C++ AcWing 891. Nim游戏 /* 题目描述: 891. Nim游戏: 给定 n 堆石子,两位玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),最后无法进行操作的人视为失败。 问如果两人都采用最优策略,先手是否必胜。 输入格式: 第一行包含整数 n。
阅读全文
摘要:c++ 求组合数 II /* 问题描述: 886. 求组合数 II 给定 n 组询问,每组询问给定两个整数 a,b,请你输出 Cbamod(109+7) 的值。 输入格式 第一行包含整数 n。 接下来 n 行,每行包含一组 a 和 b。 输出格式 共 n 行,每行输出一个询问的解。 数据范围 1 ≤
阅读全文
摘要:C++ 求组合数 I /* 题目描述: 给定 n 组询问,每组询问给定两个整数 a,b,请你输出 Cbamod(109+7) 的值。 输入格式: 第一行包含整数 n。 接下来 n 行,每行包含一组 a 和 b。 输出格式: 共 n 行,每行输出一个询问的解。 数据范围: 1 ≤ n ≤ 10000,
阅读全文
摘要:扩展欧几里得算法 c++ 扩展欧几里得算法 /* * 扩展欧几里得算法 * * ai×xi+bi×yi=gcd(ai,bi) * * 之前欧几里得算法已经有过证明,这里简述是如何扩展 gcd 求得方程解的 * * 递归终点,b = 0 时, gcd(a, b) = a * a * 1 + b * 0
阅读全文
摘要:c++ 最大公约数 /* 定理: 求解正整数 x, y 的最大公约数 gcd(x, y),等价于求解 gcd(y, x mod y) 证明: 使用分类讨论的方法证明: 当 x > y: gcd(x, y) = gcd(y, x % y) 证明: t = x % y = x - int(x / y)
阅读全文
摘要:c++ 约数个数 & 约数之和 /* * * 约数个数 & 约数之和 * * 问题描述: * 给定数字 x,问数字 x 的约数个数和约数求和的结果。 * * 算法思路1: * 最朴素的做法,使用试除法求出 `x` 的所有约数,那么个数以及约数和就可以得到。 * 复杂度 O(\sqrt(N)) * 算
阅读全文
摘要:c++ 试除法求约数,复杂度 /* * 试除法求约数 * 算法概述: * 给定 n 个正整数 ai,对于每个整数 ai,请你按照从小到大的顺序输出它的所有约数。 * * 算法较为简单,同样是 O(N^0.5)的复杂度 */ #include <cstdi
阅读全文
摘要:c++ 筛质数 /* * 素数筛 * 素数、质数定义: * 质数,又叫素数,是指一个大于1的自然数,且除了1和它本身外,不能被其他自然数整除的数。换句话说,就是该数除了1 和它本身以外,不再有其他的因数。 * * 在先前的博客中,我们介绍了试除法 O(sqrt(N)) 判断一个数字是否为素数;以及
阅读全文
摘要:c++ /* * 试除法判断质数、分解质因数 * 本次将要介绍关于质数两个比较常见的算法,试除法判断质数和分解质因数 * * 质数定义: * 质数,又叫素数,是指一个大于1的自然数,且除了1和它本身外,不能被其他自然数整除的数。换句话说,就是该数除了1 和它本身以外,不再有其他的因数。 * * 算法
阅读全文