前言

至于为什么D2要分上下午,唯一的原因就是lyd那个毒瘤用了一上午讲他昨天要讲的鬼畜东西,所以今天下午才开始讲数论了

对了,补一下lyd的数论人

《数论人》(大雾)				数论的光束是歌德巴赫
那是谁?是谁?是谁? 将数论之力 集于一身
那是数论 数论人 数论人 正义的英雄
背负着纯粹数学之名 数论人 数论人
舍弃了一切(指实际生产)去战斗的男人
数论之箭是费马大定理
数论之耳是四色定理
数论之翼是黎曼猜想

开始吧

各种各样的高精

这个魔鬼上来就讲高精度

因为都学会了,就直接看当年的博客吧(惆怅

快速幂

这个其实是基于倍增思想?(反正很多东西都是相通的

其实就是/2下取整等等操作,代码如下

int power(int a, int p) {
long long res = 1;
while (p)
{
if (p & 1)
res = res * a;
a = a * a;
p >>= 1;
}
return res;
}

矩阵乘法

一个i行k列的矩阵乘上一个k行j列的矩阵会变成i行j列的矩阵

答案矩阵的第i,j个元素为A矩阵第i行第k个元素乘B矩阵第k行第j个元素,k是从1到m,就是一个矩阵的行乘另一个矩阵的列

上一下代码

for (int i = 1;i <= n; ++i)
for (int k = 1;k <= m; ++k)
for (int j = 1;j <= r;++j)
c[i][j] + a[i][k] * b[k][j];

矩阵乘法常常用于求一些线性的递归方程组,可以起到非常牛逼的加速作用

比如斐波那契的矩阵就是

1 1
1 0
[f[n], f[n - 1] ] * [矩阵] ^ k = [f[n + k], [n + k - 1] ]

矩阵快速幂基于以下的原理,即可以找到一个矩阵 M使得

[F(n-1) F(n)]T * M = [F(n) F(n+1)] T

以斐波拉期数列为例:M = ((1 1) (1 0))

以此类推:

[F(0) F(1)]T * Mn = [F(n) F(n+1)]T

我们成功将一个递推式转化成了一个求矩阵幂的问题

利用快速幂算法可以将时间缩短为 O(d^3 logn)

利用 FFT + 矩阵特征多项式的黑科技可以把时间进一步缩短到 O(dlogdlogn)

我们来试着写一下下面的矩阵:

F(n) = 7F(n-1) + 6F(n-2) + 5n + 4 * 3^n

先考虑转换前后的两个矩阵,肯定要有所有在转换中需要的

我们发现如果要从f[n-1]转换到f[n],要用到f[n-1],f[n-2],n,3^n,我们就先写上这些

然后发现n要转换到n+1就需要个1,再加上1就好了

[f[n - 1], f[n - 2], n, 3 ^ n, 1]

[f[n], f[n - 1], n + 1, 3 ^ (n + 1) ,1]

然后按照递推式搞一搞就ok

高斯消元

这个东西和行列式求值也比较像,其实就是用矩阵运算吧

这是曾经的一个代码

#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
double n, a[20][20], ans = 1;
int sum;
inline void CH1(int x, int y, double k) //第y行减k*x
{
for (int i = 1; i <= n; ++i)
a[y][i] -= (double)(k * a[x][i]);
}
inline void CH2(int x, int y) //交换x列和y列
{
for (int i = 1; i <= n; ++i)
swap(a[i][x], a[i][y]);
}
inline double CH3(int x, double k) //把第x行提出一个公因数k
{
for (int i = 1; i <= n; ++i)
a[x][i] /= k;
return k;
}
int main()
{
scanf("%lf", &n);
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
scanf("%lf", &a[i][j]);
for (int i = 1; i < n; ++i)
{
sum=i;
while (a[i][i] == 0 && sum<=n) //对是否a[i][i]是0的特判
{
CH2(i, sum + 1); //交换x列和y列
ans *= -1;
sum++;
}
ans *= CH3(i, a[i][i]);
for (int j = i + 1; j <= n; ++j)
CH1(i, j, a[j][i]);
}
for (int i = 1; i <= n; ++i)
ans *= a[i][i];
printf("%0.0lf", ans);
return 0;
}

这个是lh神仙的高斯消元

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pr;
const double pi = acos(-1);
#define rep(i, a, n) for (int i = a; i <= n; i++)
#define per(i, n, a) for (int i = n; i >= a; i--)
#define Rep(i, u) for (int i = head[u]; i; i = Next[i])
#define clr(a) memset(a, 0, sizeof a)
#define pb push_back
#define mp make_pair
#define fi first
#define sc second
ld eps = 1e-9;
ll pp = 1000000007;
ll mo(ll a, ll pp)
{
if (a >= 0 && a < pp)
return a;
a %= pp;
if (a < 0)
a += pp;
return a;
}
ll powmod(ll a, ll b, ll pp)
{
ll ans = 1;
for (; b; b >>= 1, a = mo(a * a, pp))
if (b & 1)
ans = mo(ans * a, pp);
return ans;
}
ll read()
{
ll ans = 0;
char last = ' ', ch = getchar();
while (ch < '0' || ch > '9')
last = ch, ch = getchar();
while (ch >= '0' && ch <= '9')
ans = ans * 10 + ch - '0', ch = getchar();
if (last == '-')
ans = -ans;
return ans;
}
//head
int n, m;
double a[100][100]; bool check(int k)
{
if (fabs(a[k][n + 1]) < eps)
return 1;
rep(i, 1, n) if (fabs(a[k][i]) > eps) return 1;
return 0;
}
int main()
{ n = read();
m = n;
rep(i, 1, m)
rep(j, 1, n + 1) a[i][j] = read(); int flag = 0;
rep(i, 1, n)
{
int t = i;
while (a[t][i] == 0 && t <= n)
t += 1;
if (t == n + 1)
{
flag = 1;
continue;
}
rep(j, 1, n + 1) swap(a[i][j], a[t][j]); //交换两行
double kk = a[i][i]; //每一行对角线上的值
rep(j, 1, n + 1) a[i][j] /= kk;
rep(j, 1, m) //循环m个式子 开始消元
if (i != j)
{
double kk = a[j][i];
rep(k, 1, n + 1)
a[j][k] -= kk * a[i][k];
}
}
if (flag)
{ return printf("No Solution\n"), 0;
}
rep(j, 1, m)
{
printf("%.2lf", a[j][n + 1] / a[j][j]);
puts("");
} return 0;
}

数论好恶心

筛法

筛法的话一般就是埃拉托色尼筛或者是欧拉筛(线性筛)

埃拉托色尼筛

思想就是所有质数的倍数都被筛掉

    memset(b, false, sizeof(b));
int tot = 0;
for (int i = 2; i <= n; ++i)
{
if (!b[i])
{
prime[++tot] = i;
for (int j = i * 2; j <= n; j += i)
b[j] = true;
}
}

欧拉筛(线性筛)



保证了所有的数只被最小的质因数筛掉

欧拉筛还可以用来维护一些复杂的函数值

如:逆元、一个数的质因数分解中最大的指数的值

积性函数

积性函数:对于所有互质的 x 和 y,F(x * y) = F(x) * F(y)

完全积性函数:对于所有 x 和 y ,F(x * y) = F(x) * F(y)

常见的积性函数:

欧拉函数 φ(n) :不超过 n 与 n 互素的数的个数

D2下午的更多相关文章

  1. [日常] NOI2019 退役记

    这次要彻底退役了 开个坑先 Day -2 出发坐车去gz 好像和上次去雅礼的车是同一趟于是大家都以为和上次一样是 \(10:40\) 开车, 于是提前2h大概八点多就去坐公交了 到了之后取票, 发现票 ...

  2. OI总结

    当下考的钟声叮当响起,该走了,一年半的OI竞赛就此结束 留下了很多遗憾.也拥有过一段美好的竞赛生活 结识了一群优秀的OI战友,一起进步一起开心一起忧愁,但这一切的一切都将在今晚变成过去式,CSp的好与 ...

  3. D2 前端技术论坛总结(下)

    此篇文章不接上篇了,下午4场我就不一一介绍了,主要总结下 D2 整场下来都讲了些什么.   整场下来,就3个关键词:nodejs,多终端,工程化   nodejs 从杭js到d2,大会上提到最多的词汇 ...

  4. PKUSC 模拟赛 day2 下午总结

    终于考完了,下午身体状况很不好,看来要锻炼身体了,不然以后ACM没准比赛到一半我就挂掉了 下午差点AK,有一道很简单的题我看错题面了所以没有A掉 第一题显然是非常丝薄的题目 我们很容易通过DP来O(n ...

  5. 记录一次参加D2前端技术论坛的杭州之行

    前言 在这里,闰土首先要感谢以下两位大佬提供的门票,分别是来自新浪微博部门的H同学,以及来自小米科技的D同学. 当我周六晚上在青旅写完这篇文章过后,第二天上网发现,已经有大佬提前一步在掘金上发布了高质 ...

  6. 从2014年D2前端技术论坛看前端发展趋势

    上周六有幸參加了在杭州阿里巴巴西溪园区举办的2014年D2前端技术论坛和晚上的酒会.实地感受了一下阿里巴巴前端开发的技术氛围和影响力.整体上看这次D2规模还是挺大的,国内前端的知名大牛基本上都到了. ...

  7. 去参加了十四届D2前端大会~

    朋友喊我去一起去d2,原来一直在加班,没有想去的动力,后来业务上线,幸运的入手了别人转的一张票(也不便宜啊)- 讲了五个挑战 端侧渲染体系的重塑,从PC时代到无线时代,再到未来的IOT时代,在渲染方面 ...

  8. 搞了我一下午竟然是web.config少写了一个点

    Safari手机版居然有个这么愚蠢的bug,浪费了我整个下午,使尽浑身解数,国内国外网站搜索解决方案,每一行代码读了又想想了又读如此不知道多少遍,想破脑袋也想不通到底哪里出了问题,结果竟然是web.c ...

  9. [Noip2016]蚯蚓 D2 T2 队列

    [Noip2016]蚯蚓 D2 T2 Description 本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」=[3.9」=3.蛐蛐国最近蚯蚓成灾了!隔壁跳 蚤国的跳蚤也拿蚯 ...

随机推荐

  1. 五,pod控制器应用进阶

    目录 Pod 资源 标签 给资源打标签 标签选择器 Pod 生命周期 pod状态探测 livenessProbe 状态探测 livenessProbe exec 测试 livenessProbe ht ...

  2. 「工具」三分钟了解一款思维导图工具:XMind Zen

    一款非常实用的商业思维导图软件,融合艺术与创造力.致力于高效的可视化思维,强调软件的跨平台使用,帮助用户提高生产效率. 相关信息 · 操作系统:macOS / Windows / Linux · 官方 ...

  3. keras训练大量数据的办法

    最近在做一个鉴黄的项目,数据量比较大,有几百个G,一次性加入内存再去训练模青型是不现实的. 查阅资料发现keras中可以用两种方法解决,一是将数据转为tfrecord,但转换后数据大小会方法不好:另外 ...

  4. kotlin面向对象之接口、代理与委托、单例模式

    接口: 对于什么是接口这里就不概述了,跟java中的概念一样,下面直接上代码进行操练: 而男人跟女人的接口当然也是不同的,很显然男人跟女人最大的差别就是拥有"小弟弟"[我黄我暴利] ...

  5. windows开启ftp服务

    1.启动或关闭windows-->internet information services-->ftp服务器   选中 2.此电脑右键-->管理-->服务和应用程序--> ...

  6. 第二章 Vue快速入门-- 27 字符串的padStart方法使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  7. Mongodb的mapreduce

    简单的看了一下mapreduce,我尝试不看详细的api去做一个group效果,结果遇到了很多问题,罗列在这里,如果别人也遇到了类似的bug,可以检索到结果. //先看person表的数据 > ...

  8. Vue -- mounted方法中调用methods的方法(并取出mounted方法中回调函数的值)

    结果:

  9. UML(Rational Rose)安装教程【载百度经验】

    ---恢复内容开始--- Win7安装rational rose2007教程 在UML建模的众多工具中,IBM公司的rational rose建模工具可以说是最好用的建模工具了.哪我们又该如何在win ...

  10. 自动化登录QQ脚本

    1.准备第三方包: py -3.6 -m pip install win32gui py -3.6 -m pip install Pywin32 py -3.6 -m pip install pyHo ...