Basic knowledge

\[C_n^m=\frac{n!}{m!(n - m)!}
\]

快速幂

  1. // Pure Quickpow
  2. inline int qpow(int n, int m, int mod) {
  3. ll tot = 1;
  4. for (ll k = n; m; k = k * k % mod, m >>= 1)
  5. if (m & 1) tot = tot * k % mod;
  6. return tot;
  7. }
  1. /* Matrix Quickpow
  2. * Au: H15teve
  3. */
  4. #include <bits/stdc++.h>
  5. using namespace std;
  6. typedef long long ll;
  7. const int mod 1000000007
  8. ll n, p;
  9. struct matrix {
  10. ll m[100][100];
  11. matrix operator * (matrix &a) {
  12. matrix b;
  13. for (int i = 0; i < n; i++)
  14. for (int j = 0; j < n; j++) {
  15. b.m[i][j] = 0;
  16. for (int k = 0; k < n; k++)
  17. b.m[i][j] = (b.m[i][j] + m[i][k] * a.m[k][j]) \% mod;
  18. }
  19. return b;
  20. }
  21. } start;
  22. matrix mpow(matrix a, ll k) {
  23. if (k == 1) return a;
  24. a = mpow(a, k / 2);
  25. if (k \% 2) return (a * a) * start;
  26. else return a * a;
  27. }
  28. int main() {
  29. n = readll(), p = readll();
  30. for (int i = 0; i < n; i++)
  31. for (int j = 0; j < n; j++)
  32. start.m[i][j] = readll();
  33. matrix a = mpow(start, p);
  34. for (int i = 0; i < n; i++) {
  35. for (int j = 0; j < n; j++)
  36. writellb(a.m[i][j]);
  37. writeln();
  38. }
  39. return 0;
  40. }

乘法逆元

  1. /* 费马小定理求乘法逆元
  2. * Au: Menci
  3. */
  4. inline int qpow(int n, int m, int mod) {
  5. ll tot = 1;
  6. for (ll k = n; m; k = k * k % mod, m >>= 1)
  7. if (m & 1) tot = tot * k % mod;
  8. return tot;
  9. }
  10. inline int inv(int x, int mod) {
  11. return qpow(x, mod - 2);
  12. }
  13. /* 扩展欧几里得求乘法逆元
  14. * Au: Menci
  15. */
  16. void exgcd(const int a, const int b, int &g, int &x, int &y) {
  17. if (!b) g = a, x = 1, y = 0;
  18. else exgcd(b, a % b, g, y, x), y -= x * (a / b);
  19. }
  20. inline int inv(const int num) {
  21. int g, x, y;
  22. exgcd(num, MOD, g, x, y);
  23. return ((x % MOD) + MOD) % MOD;
  24. }

For more specific explanation, see Link .

组合数

  1. /* Luogu 2822 组合数问题
  2. * Au: GG
  3. * C_n^m=\frac{n!}{m!(n - m)!}
  4. * 预处理 DP O(n^2) + 统计 O(n)
  5. */
  6. const int N = 2000 + 3, Nx = 2001;
  7. int n, m, t, k, ans, c[N][N], d[N][N];
  8. int main() {
  9. scanf("%d%d", &t, &k);
  10. for (int i = 1; i <= Nx; i++) {
  11. c[i][1] = i % k; c[i][i] = 1;
  12. }
  13. for (int i = 2; i <= Nx; i++)
  14. for (int j = 2; j <= i - 1; j++)
  15. c[i][j] = (c[i - 1][j] % k + c[i - 1][j - 1] % k) % k;
  16. for (int i = 1; i <= Nx; i++)
  17. for (int j = 1; j <= i; j++) {
  18. if (c[i][j]) d[i][j] = d[i][j - 1];
  19. else d[i][j] = d[i][j - 1] + 1;
  20. }
  21. while (t--) {
  22. scanf("%d%d", &n, &m);
  23. ans = 0;
  24. for (int i = 1; i <= n; i++) {
  25. if (i > m) ans += d[i][m]; else ans += d[i][i];
  26. }
  27. printf("%d\n", ans);
  28. }
  29. return 0;
  30. }

同余方程

\[ax \equiv 1 \pmod b
\]

\[ax + by = 1
\]

  1. void exgcd(const int a, const int b, int &g, int &x, int &y) {
  2. if (!b) g = a, x = 1, y = 0;
  3. else exgcd(b, a % b, g, y, x), y -= x * (a / b);
  4. }
  5. int main() {
  6. int a, b, g, x, y;
  7. scanf("%d%d", &a, &b);
  8. exgcd(a, b, g, x, y);
  9. printf("%d\n", (x + b) % b);
  10. return 0;
  11. }

素数筛法

Eratosthenes 筛法:

  1. /* Sieve of Eratosthenes
  2. * Au: GG
  3. */
  4. #include <bits/stdc++.h>
  5. using namespace std;
  6. const int N = 100000002;
  7. int n, prime[N], tot;
  8. bool check[N];
  9. inline void Sieve_of_Eratosthenes() {
  10. for (register int i = 2; i <= n; i++) {
  11. if (!check[i]) prime[tot++] = i;
  12. for (register int j = 0; j < tot; j++) {
  13. if (i * prime[j] > n) break;
  14. check[i * prime[j]] = true;
  15. if (i % prime[j] == 0) break;
  16. }
  17. }
  18. }
  19. int main() {
  20. scanf("%d", &n);
  21. Sieve_of_Eratosthenes();
  22. printf("%d\n", tot);
  23. return 0;
  24. }

GCD

  1. ll gcd(ll x, ll y) {
  2. if (x == y) return x;
  3. return !y ? x : gcd(y, x % y);
  4. }

GCD 欧几里得算法

$ a,b $ 为正整数,设集合 \(A=\{xa+yb | x, y\) 是整数 \(\}\),则 $ A $ 中最小正元素是 $ \gcd(a,b) $

  1. long kgcd(long a, long b) {
  2. if (a == 0) return b;
  3. if (b == 0) return a;
  4. if (!(a & 1) && !(b & 1)) return kgcd(a >> 1, b >> 1) << 1;
  5. else if (!(b & 1)) return kgcd(a, b >> 1);
  6. else if (!(a & 1)) return kgcd(a >> 1, b);
  7. else return kgcd(abs(a - b), min(a, b));
  8. }

LCM

\[\text{lcm} ( a, b ) = a \times b \div \gcd ( a, b )
\]

实际上最好写成 $ a \div \text{lcm} (a,b) \times b $.

  1. long lcm(long a, long b) {
  2. long c, d, sw;
  3. c = (a >= b) ? a : b;
  4. d = (a <= b) ? a : b;
  5. while (c % d != 0) {
  6. sw = c % d;
  7. c = d;
  8. d = sw;
  9. }
  10. return (a / d) * b;
  11. }

求多个数的 \(\textrm{LCM}\),需要将 \(res\) 初始化为 \(1\)

数的各位之和

  1. int sum(int number) {
  2. int sum = 0;
  3. while (number != 0) {
  4. sum += number % 10;
  5. number /= 10;
  6. }
  7. return sum;
  8. } // 不知道数有几位,但是可以每次都取个位

年份、日期

Reference: Link

  1. /* 判断是否闰年 */
  2. bool isleap(int& year) {
  3. if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) return true;
  4. else return false;
  5. }
  6. /* 返回一年的最大天数 */
  7. int maxday(int& year) {
  8. if (isleap(year)) return 366;
  9. else return 365;
  10. }
  11. // Days 是指距离某个日期是多少天, 应该均可以的, 只是最终结果可能有所变化的.
  12. string getweek(int& days) {
  13. return week[days % 7];
  14. }

中国剩余定理

For more specific explanation, see Link .

NOIp 数学 (小学奥数)的更多相关文章

  1. 【GDKOI2017】 两个胖子萌萌哒 小学奥数题

    题目大意:给你一个$n\times m$的网格,你要在这个网格上画三角形. 三角形的顶点只能在网格的整点上,且至少有一条边平行于$x$或$y$轴,且三角形面积为整数.问你能画多少个不同的三角形. 两个 ...

  2. python基础===一道小学奥数题的解法

    今早在博客园和大家分享了一道昨晚微博中看到的小学奥数题,后来有朋友给出了答案.然后我尝试用python解答它. 原题是这样的: 数学题:好事好 + 要做好 = 要做好事,求 “好.事.做.要”的值分别 ...

  3. luogu 1258 小车问题 小学奥数(?)

    题目链接 题意 甲.乙两人同时从A地出发要尽快同时赶到B地.出发时A地有一辆小车,可是这辆小车除了驾驶员外只能带一人.已知甲.乙两人的步行速度一样,且小于车的速度.问:怎样利用小车才能使两人尽快同时到 ...

  4. [CSP-S模拟测试]:方程的解(小学奥数)

    题目描述 给出一个二元一次方程$ax+by=c$,其中$x$.$y$是未知数,求它的正整数解的数量. 输入格式 第一行一个整数$T$,表示有$T$组数据.接下来$T$行,每行$3$个整数$a$.$b$ ...

  5. NOI上看到的几个小学奥数

    :余数相同问题 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 已知三个正整数 a,b,c. 现有一个大于1的整数x,将其作为除数分别除a,b,c,得到的余数相同 ...

  6. 一个hin秀的小学三年级奥数题 [hin秀]

    ~~~~~~不知为何总会被小学的题虐哭QAQ,真的秀啊,毒害广大小朋友~~~~~~ 一个hin秀的小学三年级奥数题    [hin秀] 题目: 给出一个无限大的棋盘  n×n  (n>0 , 是 ...

  7. Noip数学整理

    目录 Noip数学整理 序 1 取模相关 2 质数相关 3.基本操作 4.方程相关 5.数列相关 6.函数相关 Noip数学整理 序 因为某些原因, Noip对于数学方面的考纲仅停留在比较小的一部分, ...

  8. 鬼知道NOI会不会成为下一个奥数

    认真写作文不可能的,这辈子不可能认真写作文的. (月考,期末考,高考即将到达战场,真香警告) 以下应该成为原稿!!! 真.喜欢写感悟,但我感觉我可能把它写的有点商业化,商业化的文章不可能放的,所以我尽 ...

  9. NOIp 数学知识点总结

    推荐阅读 NOIp 基础数论知识点总结: https://www.cnblogs.com/greyqz/p/number.html 排列组合 常用公式 排列:\[\displaystyle A_n^m ...

随机推荐

  1. 2 Hadoop集群安装部署准备

    2 Hadoop集群安装部署准备 集群安装前需要考虑的几点硬件选型--CPU.内存.磁盘.网卡等--什么配置?需要多少? 网络规划--1 GB? 10 GB?--网络拓扑? 操作系统选型及基础环境-- ...

  2. MyBatis Generator 生成的example 使用 and or 简单混合查询

    MyBatis Generator 生成的example 使用 and or 简单混合查询 参考博客:https://www.cnblogs.com/kangping/p/6001519.html 简 ...

  3. 20191105 《Spring5高级编程》笔记-第11章

    第11章 任务调度 任务调度由三部分组成: 任务:需要在特定时间运行或定期运行的业务逻辑块: 触发器:指定任务应该执行的条件: 调度程序:根据来自触发器的信息执行任务: 11.2 Spring中的任务 ...

  4. Linux的简介安装与简单使用

    一: 适合初学者的最佳Linux发行版:Linux Mint 老旧硬件的最佳Linux发行版:Ubuntu MATE 安全行业的最佳Linux发行版:Kali Linux 专属游戏的Linux发行版: ...

  5. SpringBoot 参数检查 Controller中检查参数是否合法

    springboot 验证 默认使用的是hibernate validator ,不用额外增加引用包,springboot已经内置包含. 设置pom相关依赖 <?xml version=&quo ...

  6. PHP 中的 $this, static , self ,parent 等等关键字的总结

    先说结论: self 和 __CLASS__,都是对当前类的静态引用,取决于定义当前方法所在的类.也就是说,self 写在哪个类里面, 它引用的就是谁.$this 指向的是实际调用时的对象,也就是说, ...

  7. POJ-1502 MPI Maelstrom 迪杰斯特拉+题解

    POJ-1502 MPI Maelstrom 迪杰斯特拉+题解 题意 题意:信息传输,总共有n个传输机,先要从1号传输机向其余n-1个传输机传输数据,传输需要时间,给出一个严格的下三角(其实就是对角线 ...

  8. POJ 1905 题解(二分+几何)

    题面 传送门 分析 如图:已知AB=L,弧AB=L(1+nC)" role="presentation" style="position: relative;& ...

  9. vue 使用jssdk分享

    背景 在vue中使用jssdk微信分享 weixin-js-sdk mint-ui需要安装npm install weixin-js-sdk mint-ui --save mixins/wechat. ...

  10. 原生JS代码实现随机产生一个16进制的颜色值

    封装一个函数 function getColor() { var str = "#"; //一个十六进制的值的数组 var arr = ["0", " ...