
数论
ws_yzy
一如OI情似海
展开
-
【数论】线性筛素数,线性筛欧拉函数,求前N个数的约数个数
div算法先来最基本的线性筛素数,以后的算法其实都是基于这个最基本的算法:[cpp] view plaincopy#include #include #define M 10000000 int prime[M/3]; bool flag[M]; void get_prime() { in转载 2015-10-30 19:40:04 · 724 阅读 · 0 评论 -
中国剩余定理
数论太弱啦,还是来点基础的吧..终于不用担心小学奥数题不会做啦…… 中国剩余定理是解决线性模方程组的东西 x≡a1(modp1)x\equiv a_{1}(mod \;p_{1}) x≡a2(modp2)x\equiv a_{2}(mod \;p_{2}) .......... 考虑将两个方程合并 x=k1∗p1+a1x=k_{1}*p_{1}+a_{1} x=k2∗p2+a2x=k_原创 2016-02-27 16:58:02 · 542 阅读 · 0 评论 -
HDU 1028 Ignatius and the Princess III|母函数
母函数裸题..套模板就OK#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<set>#include<map>#include<vector>#include<queue>#include<iostream>#include<algorithm>using namespace std原创 2016-02-28 15:34:00 · 425 阅读 · 0 评论 -
3930: [CQOI2015]选数|递推|数论
题目让求从区间[L,H][L,H]中可重复的选出nn个数使其gcd=kgcd=k的方案数 转化一下也就是从区间[⌈Lk⌉,⌊Hk⌋][\lceil\frac{L}{k}\rceil,\lfloor\frac{H}{k}\rfloor]中可重复的选出nn个数使其gcd=1gcd=1的方案数 然后f[i]f[i]表示gcd=igcd=i的方案数,考虑去掉所有的数都是重复的情况,这种情况最后在判断一下原创 2016-03-23 20:07:59 · 1582 阅读 · 1 评论 -
BZOJ 2111: [ZJOI2010]Perm 排列计数|组合数学|Lucas定理|DP
题目也就是让求1..n1..n的小根堆的数目 F[i]F[i]表示以标号为i的点做堆顶的合法堆的数目 f[i]=C(size[i]−1,size[i<<1])∗f[i<<1]∗f[i<<1|1]f[i]=C(size[i]-1,size[i<<1])*f[i<<1]*f[i<<1|1] 组合数要用Lucas定理求!#include<bits/stdc++.h>using namespace原创 2016-02-28 10:18:06 · 578 阅读 · 0 评论 -
BZOJ 2005: [Noi2010]能量采集|容斥原理
做这个题上来就SB.. Ans=∑i=1n∑j=1m2∗gcd(i,j)−1Ans=\sum_{i=1}^{n}\sum_{j=1}^{m}2*gcd(i,j)-1 然后我想成2∗gcd(i,j)2*gcd(i,j)的因子个数,各种推式子,各种过不了样例.. gcd(x,y)=i说明,(0,0)到(x,y)能被分成相同的i块,每一块中间都不经过任何整点 龙哥一语道破!!!求起来类似莫原创 2016-02-26 15:31:03 · 404 阅读 · 0 评论 -
1951: [Sdoi2010]古代猪文|数论大合集
做这个题大概需要直到以下姿势:快速幂,费马小定理,卢卡斯定理,中国剩余定理。(大概也就这些题目大概是让求g∑d|nCdnmodpg^{\sum_{d|n}C_{n}^d}\quad mod\quad p 然后根据费马小定理原式=g∑d|nCdnmod(p−1)modp=g^{\sum_{d|n}C_{n}^d\quad mod\quad (p-1)}\quad mod\quad p 然后也就是要原创 2016-03-21 08:34:30 · 1636 阅读 · 3 评论 -
BZOJ 3000: Big Number|斯特林公式
答案显然Ans=⌊logn!logk⌋+1Ans=\lfloor\frac{logn!}{logk}\rfloor+1 斯特林公式(不是加特林n!≈2πn−−−√∗(ne)nn!\approx\sqrt{2\pi n}*(\frac{n}{e})^n 对于小范围的数暴力计算,大范围的数直接取近似就行啦 精度问题很玄学……#include<cstdio>#include<cstdlib>#i原创 2016-02-23 19:44:51 · 1431 阅读 · 2 评论 -
3813: 奇数国|树状数组|欧拉函数
题目显然让求φ(∏i=lrai)φ(\prod_{i=l}^{r}a_{i}) 可以用线段树维护一下乘积然后求逆元再求欧拉函数,用压位的方法可以缩小60倍的常数。考虑一下树状数组的做法,因为只有6060个质因子,所以可以开6060个树状数组维护每一个质因子,最初维护了前缀的乘积然后T飞了。因为乘法比起加法还是比较慢的所以可以维护一个前缀的指数和,这样就可以在BZOJ成功卡进最后一页QAQ,然而UO原创 2016-03-20 15:48:07 · 1149 阅读 · 0 评论 -
1408: [Noi2002]Robot|快速幂|欧拉函数
真是一道神题,语文渣渣表示已经给题意描述跪烂了。。 独立数显然就是欧拉函数φφ 然后政客军人他们的分解成的奇素数的指数显然都是11,最初的思想就是暴力枚举只有1个奇函数的情况,2个,3个…………这样显然是会超时,可以发现欧拉函数是满足积性的,所以可以放到一起乘起来算用一种类似于DP的“前缀和”的思想来做 ans1ans1表示当前有奇数个奇数质因子的”前缀和” ans2ans2表示当前有偶数个原创 2016-03-20 10:46:49 · 1506 阅读 · 0 评论 -
2751: [HAOI2012]容易题(easy)|快速幂
很显然就是每一个位置可以取得数字之和都乘起来 然后限制并不多,也就是说大部分位置上的数字之和是相同的,然后用快速幂单独把这些的乘积搞出来,然后再单独算那些有限制的位置。 PS:PS:限制可能有重复,所以要特判一下,不过样例良心给了重复的#include<algorithm>#include<iostream>#include<cstdlib>#include<cstring>#inclu原创 2016-03-20 08:42:10 · 1470 阅读 · 0 评论 -
2721: [Violet 5]樱花|约数个数
先跪一发题目背景QAQ 显然x,y>n!x,y> n!,然后可以设y=n!+dy=n!+d 原式子可以化简成x=n!2d+n!x=\frac{n!^2}{d}+n! 那么解的个数也就是n!n!的因子个数,然后线性筛随便搞一搞#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<queue>#原创 2016-03-20 07:44:56 · 1407 阅读 · 0 评论 -
3629: [JLOI2014]聪明的燕姿|约数和|DFS
设M(x)M(x)为xx的约数和,那么考虑约数和的求法,约数和显然是一个积性函数。 设x=pt11∗pt22∗pt33∗......∗ptnnx=p_{1}^{t_{1}}*p_{2}^{t_{2}}*p_{3}^{t_{3}}*......*p_{n}^{t_{n}} 那么M(x)=∑c1=0t1pc11∗∑c2=0t2pc22∗∑c3=0t3pc33∗......∗∑cn=0tnpcnnM(原创 2016-03-19 09:59:01 · 1156 阅读 · 0 评论 -
2659: [Beijing wc2012]算不出的算式|找规律
传说中到找规律题QAQ 扒代码大法好#include<iostream>#include<cstdio>using namespace std;long long p,q;int main(){ scanf("%lld%lld",&p,&q); if (p==q) p++; cout << (p>>1)*(q>>1); return 0;}原创 2016-03-15 21:08:55 · 561 阅读 · 0 评论 -
BZOJ 4403: 序列统计|Lucas定理
答案为C(R-L+1+n,n) by yts1999大爷 然后lucas定理 ps: 预处理时阶乘和逆元数组中:fac[0]=inv[0]=1 !! 预处理时阶乘和逆元数组中:fac[0]=inv[0]=1 !! 要不然会wa#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<que原创 2016-02-14 18:12:26 · 627 阅读 · 0 评论 -
BZOJ 2186: [Sdoi2008]沙拉公主的困惑| 数论
ans=(phi(m))*(n!/m!)phi(m!)=m!*(p-1)/p p为m!的质因数ans=n!*(p-1)/p 然后就是求逆元用费马小定理求得 巨慢如雷电 10秒卡过 ........————————这里说一下费马小定理求逆元R是质数求a关于R的逆元可以用快速幂 a^(R-2)%R即为a的逆元 因为 a*a^(R-2)=a^(R-1)=1原创 2016-01-06 18:43:38 · 775 阅读 · 0 评论 -
BZOJ 3884: 上帝与集合的正确用法|数论
一道很神奇的数论题 利用欧拉定理随便搞搞 不会打题面给的222……很不爽啊 还是一起Orz PoPoQQQ的题解吧 http://blog.youkuaiyun.com/popoqqq/article/details/43951401#include<set>#include<map>#include<ctime>#include<queue>#include<cmath>#include<c原创 2016-01-20 06:59:21 · 573 阅读 · 0 评论 -
2982: combination|lucas定理
卢卡斯定理裸题忘输出回车wa了两发#include#define M 10007using namespace std;int fac[10086],inv[10086];int cal(int x){ int y=M-2,ans=1; while(y) { if(y&1)ans=ans*x%M; x=x*x%M; y>>=1; } return ans;原创 2016-01-17 14:18:16 · 383 阅读 · 0 评论 -
2705: [SDOI2012]Longge的问题|欧拉函数
枚举gcdgcd,求出当前枚举的gcdgcd出现的次数,也就是求个欧拉函数#include<algorithm>#include<iostream>#include<cstdlib>#include<cstring>#include<vector>#include<cstdio>#include<queue>#include<cmath>#include<set>#include<原创 2016-03-15 14:40:35 · 501 阅读 · 0 评论