D2下午
前言
至于为什么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下午的更多相关文章
- [日常] NOI2019 退役记
这次要彻底退役了 开个坑先 Day -2 出发坐车去gz 好像和上次去雅礼的车是同一趟于是大家都以为和上次一样是 \(10:40\) 开车, 于是提前2h大概八点多就去坐公交了 到了之后取票, 发现票 ...
- OI总结
当下考的钟声叮当响起,该走了,一年半的OI竞赛就此结束 留下了很多遗憾.也拥有过一段美好的竞赛生活 结识了一群优秀的OI战友,一起进步一起开心一起忧愁,但这一切的一切都将在今晚变成过去式,CSp的好与 ...
- D2 前端技术论坛总结(下)
此篇文章不接上篇了,下午4场我就不一一介绍了,主要总结下 D2 整场下来都讲了些什么. 整场下来,就3个关键词:nodejs,多终端,工程化 nodejs 从杭js到d2,大会上提到最多的词汇 ...
- PKUSC 模拟赛 day2 下午总结
终于考完了,下午身体状况很不好,看来要锻炼身体了,不然以后ACM没准比赛到一半我就挂掉了 下午差点AK,有一道很简单的题我看错题面了所以没有A掉 第一题显然是非常丝薄的题目 我们很容易通过DP来O(n ...
- 记录一次参加D2前端技术论坛的杭州之行
前言 在这里,闰土首先要感谢以下两位大佬提供的门票,分别是来自新浪微博部门的H同学,以及来自小米科技的D同学. 当我周六晚上在青旅写完这篇文章过后,第二天上网发现,已经有大佬提前一步在掘金上发布了高质 ...
- 从2014年D2前端技术论坛看前端发展趋势
上周六有幸參加了在杭州阿里巴巴西溪园区举办的2014年D2前端技术论坛和晚上的酒会.实地感受了一下阿里巴巴前端开发的技术氛围和影响力.整体上看这次D2规模还是挺大的,国内前端的知名大牛基本上都到了. ...
- 去参加了十四届D2前端大会~
朋友喊我去一起去d2,原来一直在加班,没有想去的动力,后来业务上线,幸运的入手了别人转的一张票(也不便宜啊)- 讲了五个挑战 端侧渲染体系的重塑,从PC时代到无线时代,再到未来的IOT时代,在渲染方面 ...
- 搞了我一下午竟然是web.config少写了一个点
Safari手机版居然有个这么愚蠢的bug,浪费了我整个下午,使尽浑身解数,国内国外网站搜索解决方案,每一行代码读了又想想了又读如此不知道多少遍,想破脑袋也想不通到底哪里出了问题,结果竟然是web.c ...
- [Noip2016]蚯蚓 D2 T2 队列
[Noip2016]蚯蚓 D2 T2 Description 本题中,我们将用符号[c]表示对c向下取整,例如:[3.0」= [3.1」=[3.9」=3.蛐蛐国最近蚯蚓成灾了!隔壁跳 蚤国的跳蚤也拿蚯 ...
随机推荐
- Django框架——基础之视图系统(View.py)
Django框架之View.py(视图文件) 1. 视图简介 视图层是Django处理请求的核心代码层,我们大多数Python代码都集中在这一层面. 它对外接收用户请求,对内调度模型层和模版层,统合数 ...
- mybatis字符#与字符$的区别
问题:使用in查询查询出一批数据,in查询的参数是字符串拼接的.调试过程中,把mybatis输出的sql复制到navicat中,在控制台将sql的参数也复制出来,替换到sql的字符 '?' 的位置,执 ...
- TableView 键盘弹起冲突
1.TableView 上cell 带有 TextField,如果 是Plain 形式的TableView ,并且设置SectionHeader的 取消粘滞效果 会导致键盘弹起,页面不能正常 上移 问 ...
- Proxy.newInstance与InvocationHandler的使用示例
先定义一个接口,根据代理模式的原理,被代理类与代理类都要实现它. public interface Person { void eat(); } 再写一个实际执行任务的类(被代理类): public ...
- Delphi Button组件
- python、第八篇:索引原理与慢查询优化
一 介绍 1. 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查 ...
- PAT Basic 1020 月饼 (25 分)
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时允许取出一部分库存.样 ...
- Python 2中万恶的字符编码
Python2中如果文件存在中文,必须要指定#-*- coding:utf8 -*-或#coding:utf8,否则会报错.那这是为什么呢? 一.原理解析 我们知道,在计算机发展初期,计算机只能识别字 ...
- D2. Kirk and a Binary String (hard version) D1 Kirk and a Binary String (easy version) Codeforces Round #581 (Div. 2) (实现,构造)
D2. Kirk and a Binary String (hard version) time limit per test1 second memory limit per test256 meg ...
- Highcharts动态获取值
<script type="text/javascript"> $(document).ready(function (){ var o ...