数论
gjghfd
这个作者很懒,什么都没留下…
展开
-
bzoj4173 -- 欧拉函数
题解:http://blog.csdn.net/PoPoQQQ/article/details/46820313 代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define M 998244353 8 #define ll long long 9 l原创 2017-05-26 16:45:20 · 341 阅读 · 0 评论 -
[ 数论 ] [ DP ] BZOJ3462
设 S=∏i=1kpi,n=∑xipi" role="presentation" style="position: relative;">S=∏ki=1pi,n=∑xipiS=∏i=1kpi,n=∑xipiS=\prod_{i=1}^k p_i ,n=\sum x_ip_i 。 可以发现 k" role="presentation" style="position:原创 2018-01-30 19:38:22 · 272 阅读 · 0 评论 -
[ 杜教筛 数论 ] Codechef January Challenge 2018 #SQRGOOD
题目大意给你一个数 n(n≤1018)n(n\le 10^{18}) ,求第 nn 个含大于 11 平方因子的数。比赛时卡常卡到头秃 发现一个数 xx 含有平方因子等价于 μ2x=0\mu_{x}^2=0 。 令 sis_i 表示 μ2\mu^2 的前缀和,那么答案要满足的条件就是ans−sans=nans-s_{ans}=n 二分答案,然后问题就是怎么求 sis_i 。 有一个公原创 2018-01-23 11:24:04 · 373 阅读 · 0 评论 -
[ 数论 ] Codeforces896D
枚举VIP的个数 xx,求出第一种人个数的范围 [L,R][L,R]。 用类似求卡特兰数的方法可以求出答案为 (nx)∑i=LR(n−xi)−(n−xi+1){n\choose x}\sum_{i=L}^R {n-x\choose i}-{n-x\choose i+1} 即 (nx)⋅(n−xL)−(nx)⋅(n−xR+1){n\choose x}·{n-x\choose L}-{n\cho原创 2017-12-03 11:53:00 · 534 阅读 · 0 评论 -
[ 数学 费马小定理 杂题 ][ NOI2013 ] BZOJ3240
首先可以用等比数列求和公式表示出一行的关系: fi,m=am−1fi,1+b(am−1−1)a−1f_{i,m}=a^{m-1}f_{i,1}+{b(a^{m-1}-1)\over a-1} 然后乘 cc 加 dd 得到 fi+1,1f_{i+1,1} 和 fi,1f_{i,1} 的关系: fi+1,1=cam−1fi,1+bc(am−1−1)a−1+df_{i+1,1}=ca^{m-1}f_原创 2017-12-01 19:25:11 · 1295 阅读 · 0 评论 -
[ 欧拉定理 矩阵快速幂 ] BZOJ5118
如果直接用矩阵快速幂,复杂度是 O(n)O(n) 的。 因为1125899839733759是质数,所以可以用欧拉定理,求出 2n−1 mod11258998397337582^n-1 ~mod 1125899839733758 就好了。 时间复杂度 O(T⋅23⋅logn)O(T·2^3·\log n) 。#include<bits/stdc++.h>using namespace std;原创 2017-12-01 13:04:54 · 561 阅读 · 0 评论 -
[ 扩展欧拉定理 ] Balkan OI 2016 paper-towers
根据拓展欧拉定理,可以将 1−n1-n 的问题转化成 2−n2-n 的问题。 时间复杂度O(nlogn)O(n\log n) 。#include<bits/stdc++.h>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=b原创 2017-10-29 07:51:48 · 495 阅读 · 0 评论 -
[ Pollard_rho ] BZOJ4522
按题意模拟就好了。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;#define ll long long#define M 1000000007ll N,e,c,d,n,r,a[80],m;ll rt=233333333;inline ll Mul(原创 2017-11-28 19:44:03 · 192 阅读 · 0 评论 -
[ Pollard_rho ] BZOJ4802
模板题#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;#define ll long longll n,a[70],Ans;int i,j,k,m,c;inline ll mul(ll x,ll y,ll z){ ll Ans=0; fo原创 2017-11-28 18:49:41 · 273 阅读 · 0 评论 -
bzoj2759 -- LCT
神题题解#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;#define N 30010#define M 10007struct Node{ int k,b; Node(int k=0,int b=0):k(k),b(b){} No原创 2017-09-28 09:32:17 · 258 阅读 · 0 评论 -
bzoj2982 -- Lucas定理
Lucas定理裸题。。Lucas定理:C(n,m)=C(n%p,m%p)*C(n/p,m/p)%p预处理出阶乘、逆元的阶乘就可以了。 代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define p 10007 8 int i,j,k,n,m,inv原创 2017-05-26 16:45:15 · 328 阅读 · 0 评论 -
bzoj2956 -- 数论分块
直接分块就行了。注意要求出2和6的逆元。代码: 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define M 19940417 7 inline int _Min(int x,int y){return xx:y;} 8 long long i,j,Sum,Ans,n,m; 9原创 2017-05-26 16:44:03 · 573 阅读 · 0 评论 -
bzoj3529 [ SDOI2014 ] -- 莫比乌斯反演+分块
题目大意:求∑i=1n∑j=1mσ(gcd(i,j))[σ(gcd(i,j))≤a]\sum_{i=1}^n\sum_{j=1}^m\sigma(\gcd(i,j))[\sigma(\gcd(i,j))\le a]其中σ(x)\sigma(x)表示xx的约数和。原创 2017-06-13 20:43:50 · 294 阅读 · 0 评论 -
codeforces803F Coprime Subsequences -- 莫比乌斯函数+容斥
题目大意:给定一个序列,求有多少个子序列的gcd等于1。首先想到枚举每个数作为gcd,统计次数,再容斥一下。 统计答案时当这个数有偶数个约数时系数是-1,奇数个约数时是1。 然后我们发现这就是个莫比乌斯函数。 用线性筛求出莫比乌斯函数就可以了。代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>原创 2017-05-26 18:06:43 · 503 阅读 · 0 评论 -
bzoj2820--莫比乌斯反演
题目大意:给定N, M,求1推导:设nans= =由于gcd(i,j)==1等价于ans= =令 T=pt则ans=设f(T)=则f(T)可以用线性筛O(n)预处理出来。ans=分块就可以了。总时间复杂度为具体看代码。#include#include#includeusing namespace std;#define N 10000原创 2017-05-26 16:40:45 · 178 阅读 · 0 评论 -
bzoj2693--莫比乌斯反演+积性函数线性筛
推导:设d=gcd(i,j)利用莫比乌斯函数的性质 令sum(x,y)=(x*(x+1)/2)*(y*(y+1)/2)令T=d*t设f(T)=T可以分块。又由于μ是积性函数,积性函数的约束和仍是积性函数,所以f也是积性函数,可以O(n)线性筛求得。总时间复杂度为具体筛法看代码。 代码:#include#include#includeusing names原创 2017-05-26 16:40:50 · 232 阅读 · 0 评论 -
bzoj4724 [ POI2017 ] --数论
题目大意:B进制数,每个数字i(i=0,1,...,B-1)有a[i]个。你要用这些数字组成一个最大的B进制数X(不能有前导零,不需要用完所有数字),使得X是B-1的倍数。q次询问,每次询问X在B进制下的第k位数字是什么(最低位是第0位)。 思路:由于如下定理:a*Bk≡a (mod (B-1) ) 于是只要使所有位之和是(B-1)的倍数就可以了。又注意到a[i]>=1,只需删去su原创 2017-05-26 16:41:36 · 239 阅读 · 0 评论 -
[ 数论 ] Codeforces919E Congruence Equation
假设 n=Ap+B(B<p)n=Ap+B(B<p)n=Ap+B(BB⋅aAp+B≡b ( mod p )B·aAp+B≡b ( mod p )B·a^{Ap+B}\equiv b ~(~mod~p~) B⋅aA+B≡b ( mod p )B·aA+B≡b&n原创 2018-02-01 13:16:33 · 703 阅读 · 0 评论