OI-数学
文章平均质量分 57
略
嘉伟森的猫
NYU Shanghai本科,MBZUAI机器学习硕士,深度学习/强化学习菜鸡
展开
-
莫比乌斯反演定理的证明
https://www.zhihu.com/question/23764267/answer/26007647 直接去上面这个网址看吧,看一位叫做Syu Gau的大神的证明,写得非常清晰,本人不太会传图片(╯#-_-)╯,所以就不在此处再写一遍了。。。转载 2017-07-29 19:15:19 · 1439 阅读 · 0 评论 -
bzoj 2242(快速幂+扩展欧几里得+BSGS)
传送门 题解:略,几个模板ho在一起就完了。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mop=1e5+4;inline ll mult(ll x,ll y,ll MOD) { x%=MOD,y%=MOD; return ((x*y-(ll)(((long double)原创 2017-09-22 12:11:41 · 217 阅读 · 0 评论 -
bzoj 2721(线性筛)(约数个数)
传送门题解:设y=n!+t,化简后知x=(n!)^2/t+n!。所以求(n!)^2的约数个数即可。约数个数公式:若x=(p1^k1)*(p2^k2)*...*(pm*km),则x的约数个数d(x)=(k1+1)*(k2+1)*...*(km+1)所以后面枚举每个预先线性筛筛出的质数,计算它的k,由于是(n!)^2,所以每一个质数的贡献是ki*2+1,最后乘起来即可。原创 2017-10-18 19:20:11 · 373 阅读 · 0 评论 -
bzoj 2299(裴蜀定理)
传送门 裴蜀定理主要内容(扩展欧几里得的理论基础):若a,b是整数,且gcd(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数 题解: 设(a,b),(a,-b),(b,a),(b,-a)四个向量分别有t1,t2,t3,t4个 x1*a+y1*b=x x2*a+y2*b=y 其中x1=t1+t2,y1=t3+t4,x2=t3-t4,y2=t1-t2 显然x1,y2的奇原创 2017-09-22 15:34:58 · 357 阅读 · 0 评论 -
bzoj 4517(组合数学)
传送门 题解:C(n,m)*d(m), d表示错排,递推公式:d(n)=(n-1)*(d(n-1)+d(n-2)) P.S.注意特判!注意特判!注意特判!!!还有ios::sync_with_stdio(false)慎用,小心RE。。。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int MAX原创 2017-09-22 16:44:19 · 228 阅读 · 0 评论 -
莫比乌斯进阶:bzoj 3994 约数个数和(Mobius)
传送门 题解: 简直完美<(▰˘◡˘▰)> 对于求约数个数,可以参看这一篇blog 除了线性筛,可以O(n√n)求(网上很多博客中就是这么做的),不过有更快的方法,代码复杂度又不高,为啥不用(ง •̀_•́)ง。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int MAXN=5e4+5;原创 2017-09-12 23:10:26 · 414 阅读 · 0 评论 -
莫比乌斯进阶:bzoj 4407 于神之怒加强版(Mobius)
传送门 那两对很高的括号也是向下取整,代码中g(x)就是推到过程中的f(x)函数 P.S.现在才真正理解到原创的辛苦orz#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=5e6+2;const ll MOD=1e9+7;ll f[maxn],g[maxn],prime[ma原创 2017-08-20 14:08:27 · 357 阅读 · 0 评论 -
莫比乌斯入门:bzoj 1101 Zap(Mobius)
传送门 题解: #include<bits/stdc++.h>using namespace std;const int MAXN=50002,INF=0x3f3f3f3f;int mu[MAXN],prime[MAXN],tot=0;bool vis[MAXN];inline void linear_shaker() { memset(vis,false,sizeof(vis原创 2017-10-01 16:05:39 · 341 阅读 · 0 评论 -
bzoj 1042(容斥原理+背包dp)
传送门题解:先预处理出完全背包(无限制)的方案数。ans=(f(s)-d1超限-d2…+d1d2+d2d3+…-d1d2d3….+d1d2d3d4)P.S.d1超限即使用了d1+1个物品,于是剩下S-(d1+1)*c1都可以随意分配,于是d1超限的方案数就是f(S-(d1+1)*c1)#include#include#include#includeusing原创 2017-10-19 19:29:45 · 306 阅读 · 0 评论 -
莫比乌斯进阶:bzoj 2693 jzptab(Mobius)
传送门 题解: 实在看不下去以前打的巨丑的LaTex公式,于是重新打一遍顺便复习一下。(那个D=d*k的那一杠是word的输入符,请不要介意。。。) 最后一行括号里那个带sigma的式子设为f(D),是一个积性函数(具体证明牵扯到狄利克雷卷积(参看zyf2000的博客),懒得写了一大堆,我要碎觉 (╯‵□′)╯︵┻━┻ )。 若D为一个质数,由莫比乌斯函数μ的性质,f(D)=D-D^2,原创 2017-09-13 23:44:49 · 454 阅读 · 0 评论 -
Luogu 1962(矩阵快速幂)
传送门图片转自:http://www.cnblogs.com/huxianglin/p/5995649.html代码作为模板。#include#include#include#includeusing namespace std;typedef long long ll;const int MOD=1e9+7;ll n;struct Matrix { in原创 2017-10-19 23:00:06 · 228 阅读 · 0 评论 -
Luogu 3390(矩阵快速幂)
传送门模板题,注意取模以及快速幂中需ret初始化成单位矩阵才能操作。P.S.懒得封装了,估计NOIP考到这玩意我也没闲心去重载个什么乘法。。。#include#include#include#includeusing namespace std;const int N=104,MOD=1e9+7;typedef long long ll;int n;struct M原创 2017-11-06 20:06:03 · 207 阅读 · 0 评论 -
Luogu 3807(Lucas定理)
传送门模板:同时用于复习阶乘以及逆元的预处理。#include#include#include#includeusing namespace std;typedef long long ll;const int N=1e5+4;int fac[N<<1]={1,1},inv[N<<1]={1,1};int n,m,mod;inline int read() { in原创 2017-11-07 19:08:34 · 263 阅读 · 0 评论 -
Luogu 3383(线性筛)
传送门模板题。好奇NOIP会不会考用线性筛求一个化简过程中遇到的积性函数#include#include#include#includeusing namespace std;const int N=1e7+4;int prime[N/10],tot=0;bool vis[N];inline void linear_shaker(int n) { vis[1]=tru原创 2017-11-08 19:20:43 · 261 阅读 · 0 评论 -
URAL 1141(扩展欧几里德+欧拉函数)
传送门这就是传说中的RSA加密?!题意:给出正整数e,n,c。已知n=p*q,其中p,q为两个奇质数并且gcd(e,(p-1)*(q-1))=1。求出一个m使m^e=c(mod n)。题解:#include#include#include#include#includeusing namespace std;typedef long long ll;i原创 2017-10-18 16:28:37 · 346 阅读 · 0 评论 -
hdu 1796(容斥原理)
传送门虽然hdu本站和hdu_split都挂了,但是vjudge还能用。本题差不多是容斥原理的模板题,答案就是:是一个数的倍数的个数 - 是两个数的倍数的个数 + 是三个数的倍数的个数......DFS直接上,可做容斥的模板。#include#include#include#includeusing namespace std;typedef long long ll;原创 2017-10-24 21:13:35 · 279 阅读 · 0 评论 -
hdu 4135(容斥原理)
传送门题解:容斥原理。补集转化:将问题转化为求1~x内与n不互质的数的个数。将n分解质因数后,答案为:是一个质因数的倍数的数的个数 - 是两个质因数的倍数的数的个数 + 是三个质因数的倍数的数的个数......#include#include#include#includeusing namespace std;typedef long long ll;ll a,b,n,p原创 2017-10-24 21:56:24 · 458 阅读 · 0 评论 -
hdu 1576(扩展欧几里得)
A/BTime Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7677 Accepted Submission(s): 6112Problem Description要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我...原创 2018-05-04 21:28:21 · 240 阅读 · 0 评论 -
hdu 3930(BSGS+原根+扩展欧几里得)
先介绍一篇关于原根与离散对数的优秀博文:http://blog.csdn.net/smilewsw/article/details/47659793 传送门 题解: 对于X^A = B (mod C) 1.求出B关于C的原根root 2.用BSGS求出满足root^cc = B (mod C)的cc 3.由原根性质,root^x=X,所以原方程转化为求root^(xA) = root^c原创 2017-09-22 09:40:38 · 549 阅读 · 0 评论 -
莫比乌斯反演例题(双解):bzoj 2045(Mobius)
传送门 题解: 利用莫比乌斯函数性质求解: #include<bits/stdc++.h>using namespace std;typedef long long ll;const int MAXN=1e6+2;int n,m,d,t,last,mu[MAXN],prime[MAXN/10],tot=0;bool vis[MAXN];ll ans=0;inline void原创 2017-09-19 22:44:52 · 707 阅读 · 0 评论 -
bzoj 4517(组合数学)
错排公式: d(n)=(n-1)*(d(n-1)+d(n-2)); ans=C(n,m)*d(n-m); 其中需要预处理阶乘和逆元。 逆元线性递推如下:inv[i]=(mod-mod/i)*inv[mod%i]%mod;/* Staggered Formula: d(n)=(n-1)*(d(n-1)+d(n-2)); ans=C(n,m)*d(n-m);原创 2017-07-30 19:09:40 · 253 阅读 · 0 评论 -
hdu 1402(FFT)
数学基础不够QAQ,留着坑以后有水平了再来做。 *以下代码转自kuangbin的博客 传送门#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <math.h>using namespace std;const double PI = acos(-1.0);//复数结原创 2017-08-18 21:09:38 · 176 阅读 · 0 评论 -
codevs 1250(矩阵快速幂)
传送门 求斐波那契数列,矩阵快速幂模板题。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>using namespace std;typedef long long ll;ll n,MOD;struct matrix { ll x[2][2];原创 2017-08-20 22:50:23 · 174 阅读 · 0 评论 -
bzoj 2820(Mobius)
传送门 一道没有真正意义上进行反演的“反演” 题。 #include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>using namespace std;typedef long long ll;const int MAXN=1e7+2;bool vis[MAXN];in原创 2017-08-21 11:31:51 · 242 阅读 · 0 评论 -
bzoj 1951(Lucas定理+中国剩余定理)
传送门 新技能get:为没有mod的组合数创造mod,然后使用Lucas定理 #include<bits/stdc++.h>using namespace std;typedef long long ll;const ll MOD=999911659;ll p[4]={2,3,4679,35617};ll fac[4][36000],g;ll d[36000],a[36000];in原创 2017-09-22 19:32:10 · 234 阅读 · 0 评论 -
bzoj 2705(欧拉函数)
传送门 大水题,但是我并没有1A( _ _)ノ|扶墙#include<bits/stdc++.h>using namespace std;typedef long long ll;ll n,ans=0;ll phi(ll n) { ll ret=n,a=n; for (ll i=2;i*i<=n;++i) { if (a%i==0) {原创 2017-09-22 20:08:44 · 261 阅读 · 0 评论 -
bzoj 2751(快速幂+乘法原理)
传送门 没时间写题解了。。。hfu老师要求22点前总结计划,大概就是表示出一般情况的答案(乘法原理),然后有限制/无限制分开计算,最后乘在一起。 转一篇别人的题解:http://www.cnblogs.com/Beckinsale/p/7488874.html#include<bits/stdc++.h>using namespace std;typedef long long ll;co原创 2017-09-22 21:28:23 · 334 阅读 · 0 评论 -
bzoj 1965(快速幂+逆元)
传送门 数论收尾ing(ง •̀_•́)ง/* ans*(2^m)==L (mod n+1) 2 mod n+1 的逆元为 n/2+1(这一步用费马小定理求迷之WA) ans=L*(n/2+1)^m (mod n+1)*/#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>u原创 2017-09-23 23:03:59 · 253 阅读 · 0 评论 -
bzoj 2301(Mobius)
基本上可以算是一道莫比乌斯反演的模板题,大概就是推出式子然后分块求和。 讲解部分转自:outer_form的博客 大意就是求在a<=x<=b,c<=y<=d,满足gcd(x,y)是k的(x,y)的对数。分析:令g(n,m,k)表示在1<=x<=n,1<=y<=m,满足gcd(x,y)是k的(x,y)的对数。 那么由容斥原理可得ans=g(c,d,k)−g(a−1,d,k)−g(b,c−1,k原创 2017-07-29 19:06:37 · 341 阅读 · 0 评论 -
bzoj 2186(欧拉函数)
传送门 题解: 引理1:若gcd(x,m)==1,则gcd(x+k*m,m)==1(k>0)(反证法) 引理2:由引理1,又因为1~b中与b互质的数有φ(b)个,有以下事实成立:若b|a,则1~a中与b互质的数有a/b*φ(b)个。 原问题:求1~n!中与m!互质的数的个数,设nn=n!,mm=m!。 则ans=nn/mm*φ(mm) 又因为φ(mm)=mm*∏((pi-1)/pi),其原创 2017-09-11 23:18:23 · 205 阅读 · 0 评论 -
bzoj 4403(Lucas定理)
传送门 题解: 考虑长度为n,值域为连续m个数的不降子序列。方案有C(n+m-1,n)=C(n+m-1,m-1)种。比如n=4,l=2,r=5,此时m=4,那么就可以视为在{2,3,4,5,x,x,x}中选择n个,比如{2,2,3,3},{2,2,2,3},{2,3,3,3}可以对应3种等价的{2,x,x,3}。 由于组合数有一个公式,如果从n个里选m个,有 C(n,m)=C(n-1,m-1原创 2017-09-20 15:54:47 · 328 阅读 · 0 评论 -
bzoj 2818(欧拉函数)
传送门 题解: 1.莫比乌斯反演,又慢又麻烦,拒绝 2.欧拉函数性质,外层枚举n以内的质数d,内层求n/d范围内互质的数对,这一步可以通过预处理欧拉函数前缀和实现,注意数对是有序的,但是(1,1)要去重。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int MAXN=1e7+2;int n,p原创 2017-09-20 16:26:59 · 252 阅读 · 0 评论 -
bzoj 4710(组合数学+容斥原理)
传送门 题解: 先介绍一条公式:将n个物品分给m个人有C(n+m-1,m-1)种方案。但是这些方案是包括了不合法的(有些人没有获得任何物品)。对于这道题,需要保证所有人都分到物品,所以容斥原理解决: ans=0个人没分到-1个人没分到+2个人没分到……n个人没分到 对于某一种情况——i个人没分到: 当前方案数=n个人选i个人方案数*每种物品都分给(n-i)个人的方案数(就是代码中now的含原创 2017-09-20 17:47:14 · 648 阅读 · 0 评论 -
bzoj 2111(Lucas定理+递推)
传送门 题解:(由Po爷的题解修改来的) 考虑一个1~i的排列所构成的堆,l为左儿子大小,r为右儿子的大小 那么1一定是堆顶,左儿子和右儿子分别是一个子堆,显然如果选出size[l]个数给左儿子,左儿子的方案数是f[l],右儿子的方案数为f[r],可以得到f[i]=C(i-1,size[l])*f[l]*f[r] P.S.如果为Lucas定理预处理逆元,那么需要考虑0,因为nn-mm可能等于原创 2017-09-20 23:31:01 · 261 阅读 · 0 评论 -
Luogu 2822(组合数学)(NOIP2016)
传送门 NOIP 2016 D2T1(组合数) 先预处理组合数: C(i,j)=C(i-1,j)+C(i-1,j-1) 再dp预处理二维每一行的前缀和,最后每组数据统计答案(O(n))即可#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const i原创 2017-08-25 21:28:06 · 235 阅读 · 0 评论 -
Luogu 1313(组合数学)(NOIP2011)
传送门 NOIP 2011 D2T1(快速幂,组合数,费马小定理,逆元) 题解就在代码之前,发现第一行所述性质就很容易搞定了。/* 在多项式(by+ax)^k中,某一项(x^n)*(y^m)中m=k-n恒成立 ans=C(k,n)*(a^n)*(b^(k-n))*/#include<cstdio>#include<cstring>#include<iostream>#i原创 2017-08-25 20:59:14 · 277 阅读 · 0 评论 -
bzoj 1856(组合数学)
传送门 题解:答案是C(n+m,m)-C(n+m,m-1)。C(n+m,m)是总方案数(n+m个位置中选m个放0),然后减去不合法的。将题意转化为:从一个矩阵的左下走到右上不能经过某条水平直线的方案数。 如果我们把1看作一个向量(1,1),0看作一个向量(1,-1),那问题就转化成从(0,0)走到(n+m,n-m)不经过直线y=-1的方案数。考虑限制的话,我们看图发现经过y=-1的情况可以看作原创 2017-09-21 17:21:09 · 262 阅读 · 0 评论 -
数论基本性质证明(欧拉函数、莫比乌斯反演)
一年前学的数论、半年前补的证明,今日附一句歌词:Lights will guide you home, and ignite your bones, and I will try to fix you.一起送给OI~原创 2018-05-23 17:19:58 · 961 阅读 · 0 评论