数论
lzc__123
这个作者很懒,什么都没留下…
展开
-
鸽巢原理学习
1.mmm个在模mmm意义下不同的正整数可以构成模mmm的完全剩余系。2.nnn个数(n>mn > mn>m),必然可以找到两个2.mmm个互不相同的数,一定能找到若干连续的数,使他们之和模mmm为0003.原创 2021-10-26 20:27:10 · 247 阅读 · 0 评论 -
Educational Codeforces Round 106 (Rated for Div. 2) D. The Number of Pairs (gcd,计数问题)
题目链接:https://codeforces.com/problemset/problem/1499/D题意:给三个正整数c,d,xc,d,xc,d,x,求有多少对(a,b)(a,b)(a,b)满足c∗lcm(a,b)−d∗gcd(a,b)=xc*lcm(a,b)-d*gcd(a,b)=xc∗lcm(a,b)−d∗gcd(a,b)=x。思路:我们可以看到左边的式子有一个因子为gcd(a,b)gcd(a,b)gcd(a,b),所以x应该为gcd(a,b)gcd(a,b)gcd(a,b)的倍数,我们把式子原创 2021-10-22 12:13:21 · 66 阅读 · 0 评论 -
Codeforces Round #276 (Div. 1) B. Maximum Value
题目链接:https://codeforces.com/problemset/problem/484/B题意:给一个长度为n的序列,求满足ai>aja_i>a_jai>aj的最大的ai%aja_i\%a_jai%aj思路:首先想到O(n^2)的暴力,考虑如何优化,对于一个aia_iai:ai=ai%aj+k∗aja_i=a_i\%a_j+k*a_jai=ai%aj+k∗aj根据这个式子,我们可以将对aia_iai的枚举转为对aja_jaj倍数的枚举,对于每个区原创 2021-10-21 00:45:38 · 139 阅读 · 0 评论 -
两道关于莫比乌斯函数的题
1. CF803F Coprime Subsequences(容斥原理,莫比乌斯函数)题意:有一个序列,求它的子序列中所有元素gcd位1的数量。思路:2. CF900D Unusual Sequences(莫比乌斯反演,组合计数)题意:原创 2021-10-19 13:32:49 · 168 阅读 · 0 评论 -
区间乘区间欧拉函数和(线段树,欧拉函数性质)
1.维护一个序列,支持两个操作:(1)0 l r w [l,r][l,r][l,r]区间乘w(2)1 l r 询问[l,r][l,r][l,r]区间欧拉函数和2.思路:考虑欧拉函数的性质:如果p是质数,p∣n且p∣n2,则φ(n)=φ(n/p)∗p如果p是质数,p|n且p|n^2,则\varphi(n)=\varphi(n/p)*p如果p是质数,p∣n且p∣n2,则φ(n)=φ(n/p)∗p如果p是质数,p∣n且p∤n2,则φ(n)=φ(n/p)∗(p−1)如果p是质数,p|n且p\nmid原创 2021-09-26 22:33:14 · 307 阅读 · 0 评论 -
Pairs Forming LCM LightOJ - 1236
题目链接:https://vjudge.net/problem/LightOJ-1236题意:求∑i=1n∑j=1n[lcm(i,j)=n]\sum_{i=1}^{n}\sum_{j=1}^{n}[lcm(i,j)=n ]∑i=1n∑j=1n[lcm(i,j)=n]思路:对于一组i,j我们分解质因数,i=p1a1∗p2a2∗…∗pkakj=p1b1∗p2b2∗…∗pkbki=p1^{a1} * p2^{a2}* … *pk^{ak}\\j=p1^{b1} * p2^{b2}* … *pk^{b原创 2021-09-07 10:15:13 · 61 阅读 · 0 评论 -
Sigma Function LightOJ - 1336
题目链接:https://vjudge.net/problem/LightOJ-1336#author=Amove题意:求[1,n]之间的因子和函数为偶数的个数思路:质因数分解后,约数之和为:(p10+p11+…+p1c1)∗…∗(pk0+pk1+…+pkck)(p1^{0} + p1^{1} + … + p1^{c1}) * … * (pk^{0} + pk^{1} + …+ pk^{ck})(p10+p11+…+p1c1)∗…∗(pk0+pk1+…+pkck)它是多个式子的乘积,考虑到只有奇数乘原创 2021-09-06 18:17:44 · 82 阅读 · 0 评论 -
Aladdin and the Flying Carpet LightOJ - 1341
题目链接:https://vjudge.net/problem/LightOJ-1341思路:开始想了n\sqrt{n}n的暴力算法,发现复杂度大概在4e9显然不能过。考虑分解质因数(试除法复杂度也不够,Pollard Rho 算法 n1/4n^{1/4}n1/4复杂度可以行),我们对分解完的质因数进行dfs枚举原数中所有因数(因数个数期望位ln(n)ln(n)ln(n)),进行计数。复杂度O(n1/4+len(n))O(n^{1/4}+len(n))O(n1/4+len(n))。代码:#inclu原创 2021-09-04 17:00:27 · 104 阅读 · 0 评论 -
Bi-shoe and Phi-shoe LightOJ - 1370
题目链接:https://vjudge.net/problem/LightOJ-1370题意:t组样例,每次给n个整数,对于每个整数aia_{i}ai,你要找到一个最小的x,x的欧拉函数值大于aia_{i}ai,答案是n个x的和。思路:筛法求1-N之间所有值的欧拉函数,做一个欧拉函数值到自变量的映射(相同的地方取小的),然后倒着递推求出如果对应整数是aia_{i}ai时,答案的权值。复杂度O(N)代码:#include<bits/stdc++.h>#define ll long原创 2021-09-04 14:37:28 · 63 阅读 · 0 评论 -
Rise of Shadows(2020 ICPC shenyang I)
#include<bits/stdc++.h>#define ll long long#define fi first#define se secondusing namespace std;typedef pair<ll,ll> pii;int main(){ ll H,M,A; scanf("%lld%lld%lld",&H,&M,&A); if(A==H*M/2) { printf("%lld",H*M); return原创 2021-09-04 00:36:39 · 315 阅读 · 0 评论 -
2021杭电多校1 1007/HDU 6956 Pass!
思路就是找规律发现递推公式,用递推公式求解通项公式,bsgs分奇偶求解可以看这篇博客https://www.cnblogs.com/xiaopangpangdehome/p/15042792.html(有exbsgs和bsgs模板)有一道类似的题:随机数生成器(洛谷也有这个题目)题目大意:思路:利用特征方程求解通项公式,再用bsgs求解,时间复杂度是O(sqrt§),注意一些特殊情况。代码:#include <bits/stdc++.h>#define ll long lon原创 2021-08-24 14:33:05 · 182 阅读 · 0 评论 -
luogu P2261 [CQOI2007]余数求和
#include<bits/stdc++.h>#define ll long longusing namespace std;int main(){ ll n,k; scanf("%lld%lld",&n,&k); ll ans=n*k; for(ll l=1,r;l<=n;l=r+1) { if(k/l!=0) r=min(k/(k/l),n); else r=n; ans-=(l+r)*(r-l+1)*(k/l)/2; //print原创 2021-09-03 17:29:57 · 90 阅读 · 0 评论 -
hdu 4497 GCD and LCM
#include<bits/stdc++.h>#define ll long long#define fi first#define se secondusing namespace std;const int N=1e6+7;map<int,int> mm;void divide(int x){ for (int i = 2; i <= x / i; i ++ ) if (x % i == 0) {原创 2021-09-03 17:27:38 · 94 阅读 · 0 评论 -
Multiply(2019 ACM- ICPC Asia Xuzhou Regional Contest E)
#include<bits/stdc++.h>#define ll long long#define fi first#define se secondusing namespace std;const int N = 1e5 + 7;ll x, y, a[N];ll max_factor;struct BigIntegerFactor { const static int N = 1e6 + 7; const static ll inf=0x3f3f3f3f3f原创 2021-09-03 17:25:34 · 123 阅读 · 0 评论 -
Divisors of the Divisors of an Integer(2018-2019 ACM-ICPC, Asia Dhaka Regional ContestC)
#include<bits/stdc++.h>#define ll long longusing namespace std;const int N=1e6+7,mod=1e7+7;int primes[N], cnt; // primes[]存储所有素数bool st[N]; // st[x]存储x是否被筛掉void get_primes(int n){ for (int i = 2; i <= n; i ++ ) {原创 2021-09-03 17:25:00 · 121 阅读 · 0 评论 -
AcWing 222. 青蛙的约会
#include<bits/stdc++.h>#define ll long longusing namespace std;ll exgcd(ll a, ll b, ll &x, ll &y){ if (!b) { x = 1, y = 0; return a; } ll d = exgcd(b, a % b, y, x); y -= a / b * x; return d;}ll原创 2021-09-03 17:23:04 · 144 阅读 · 0 评论 -
AcWing 201. 可见的点
#include<bits/stdc++.h>#define ll long long#define fi first#define se secondusing namespace std;const int N=1007;int primes[N], cnt; // primes[]存储所有素数int euler[N]; // 存储每个数的欧拉函数bool st[N]; // st[x]存储x是否被筛掉void get_eul原创 2021-09-03 17:22:10 · 49 阅读 · 0 评论 -
质数距离(AcWing 196)
#include<bits/stdc++.h>#define ll long longusing namespace std;const int N=1e6+7;ll primes[N], cnt;bool st[N];ll need[N],idx;bool stn[N];void init(ll n){ cnt = 0; for (ll i = 2; i <= n; i ++ ) { if (!st[i]) primes[cnt原创 2021-09-03 17:21:18 · 104 阅读 · 0 评论 -
夏洛克和他的女朋友(AcWing 1293)
#include<bits/stdc++.h>using namespace std;const int N=2e5+7;int primes[N], cnt; // primes[]存储所有素数int col[N],idx;void get_primes(int n){ for (int i = 2; i <= n; i ++ ) { if (!col[i]) { primes[cnt ++ ]原创 2021-09-03 17:20:27 · 91 阅读 · 0 评论 -
Fox And Jumping(CF510D)
#include<bits/stdc++.h>#define ll long long#define fi first#define se secondusing namespace std;typedef pair<ll,ll> pii;const int N=307;pii a[N];map<ll,ll> dp;int main(){ ll n; scanf("%lld",&n); for(int i=1;i<=n;i++) s原创 2021-09-03 17:18:15 · 135 阅读 · 0 评论 -
洛谷 P4139 上帝与集合的正确用法(欧拉降幂)
#include<bits/stdc++.h>#define ll long longusing namespace std;const int N=1e7+7;ll primes[N], cnt; // primes[]存储所有素数ll euler[N]; // 存储每个数的欧拉函数bool st[N]; // st[x]存储x是否被筛掉ll qpow(ll m,ll k,ll mod){ ll res = 1 % mod,原创 2021-09-03 17:16:29 · 98 阅读 · 0 评论 -
基础数论模板与公式
1.素数判定1.1试除法判素数bool is_prime(int x){ if (x < 2) return false; for (int i = 2; i <= x / i; i ++ ) if (x % i == 0) return false; return true;}1.2 Miller−Rabin 判定法ll Rand() {//决定了程序的性能 static ll x = (srand((int原创 2021-09-02 20:35:37 · 462 阅读 · 0 评论