数论
__Rain
这个作者很懒,什么都没留下…
展开
-
牛客月赛40 (求子集gcd=x)
来点gcd题意:给定一个含有 nnn 个数的序列,mmm 次询问,每次查询给出一个整数 xxx,问是否能在序列中选出一些数,满足这些数的 gcd=xgcd=xgcd=x,如果只选出一个数,那么 gcdgcdgcd 就等于这个数。思路:首先要使选出的数的 gcd=xgcd=xgcd=x,那么这些数一定都是 xxx 的倍数。考虑到 n<=2000n<=2000n<=2000,可以预处理所有答案,对于要查询的答案 iii,枚举 iii 的倍数,如果这个倍数出现过就进行 gcdgcdgcd原创 2021-11-06 16:55:02 · 179 阅读 · 0 评论 -
简单数论 线性筛
Diff-prime Pairs我们可以发现任意两个的素数都符合题意但是像 4,64,64,6 这样的合数也符合条件,它本质上就是 2∗2,2∗32*2,2*32∗2,2∗3,也就是 2,32,32,3 这对素数的拓展。那么对于任意一对素数可以拓展多少对呢,我们可以发现他们的 gcdgcdgcd 是相同的,因此决定一对素数贡献的是其中较大的一个素数。2∗x<=n,3∗x<=n2*x<=n,3*x<=n2∗x<=n,3∗x<=n333 与比它小的素数 222 产生原创 2021-10-03 13:49:51 · 80 阅读 · 0 评论 -
欧拉函数,广义欧拉定理
欧拉函数就是对于一个正整数 nnn,满足 x<n(x∈[1,n)x<n(x \in[1,n)x<n(x∈[1,n) 且 gcd(n,x)=1gcd(n,x) = 1gcd(n,x)=1 (包括 111)的 xxx 的个数,记作 φ(n)φ(n)φ(n)。欧拉函数通式:φ(x)=x∗∏i=1n(1−1pi)\varphi(x)=x*\prod_{i=1}^{n}(1-\frac{1}{p_i})φ(x)=x∗i=1∏n(1−pi1)其中 p1,p2……pnp1, p2……p原创 2021-09-17 17:37:18 · 610 阅读 · 0 评论 -
快速乘技巧
学习博客(博主讲的巨好在做乘法运算的有时候会爆 longlonglong longlonglong,例如快速幂,这时候就可以用快速乘。一、复杂度为log的快速乘我们知道乘法其实就是把很多个加法运算合到一起。现在我们的乘法会爆范围,那我们就把它转化为加法。一个一个加显然是不可能的,我们采用模拟二进制加法。inline ll ksc(ll x, ll y, ll p){ ll res = 0;// 和 while(y){ if(y & 1) res = (res + x) % p;转载 2021-09-13 19:33:21 · 98 阅读 · 0 评论 -
同 余 式
hdu-萌新-6999#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e5 + 9;int n, m, k;void work(){ ll a, b; cin >> a >> b; if(a > b) swap(a, b); if(a == 1 && b == 1) cout << -1 <&原创 2021-08-02 10:41:51 · 644 阅读 · 0 评论 -
#732 div2 A (暴力+细节) B(按位异或 C 思维 D (组合数学+逆元
A. AquaMoon and Two Arrays暴力最后操作完,需要判断最后的数组是否真的全部相等,全部相等在打印,否则输出-1#include<bits/stdc++.h>#define ll long longusing namespace std;const int maxn = 2e5 + 9;int n, k, T = 1, t;int a[maxn];int b[maxn];int main(){ cin >> T; while(T--)原创 2021-07-12 01:50:49 · 141 阅读 · 0 评论 -
Educational 107 (Div. 2) B (构造思维 C (思维 D 字符串构造(循环
B. GCD Length一开始看到这个题啥思路也没有然后看巨佬的代码,想法实在是太聪明了,就构造10的倍数#include<bits/stdc++.h>using namespace std;int t, a, b, c;const int maxn = 1e5 + 9;int qpow(int a, int n){ int ans = 1; while(n) { if(n & 1) ans = ans * a; a = a * a; n >&g原创 2021-07-11 20:06:26 · 75 阅读 · 0 评论 -
#725 (Div. 3) D(线性筛+思维 F 思维 G (思维+二分
D. Another Problem About Dividing Numbers线性筛+思维他让我们恰好通过 k 次操作来让两个数相等,我们可以取极限次数,就是除一遍这个数所有的质因子,直至为1。也就是统计两个数,所有质因子的个数的加和,这是我们能操作的最多次数。如果 k 超过这个数目,那么一定不行,否则我们可以通过组合质因子,来构造出恰好 k 次操作来让两个数相等#include<bits/stdc++.h>using namespace std;typedef long long原创 2021-07-11 19:01:05 · 143 阅读 · 0 评论 -
div2 C题 字符串思维 + gcd
C. Diluc and Kaeya#include<bits/stdc++.h>using namespace std;map <pair<int,int>, int> ma;int n;inline pair<int,int> cal(int d, int k){ int t = __gcd(d, k); d /= t; k /= t; return make_pair(d, k);}void work(){ ma.clear原创 2021-07-06 18:31:11 · 144 阅读 · 0 评论 -
数论基础 线性筛 质因数分解 大素数判定...
质因数分解 线性筛原创 2020-11-27 20:53:13 · 228 阅读 · 0 评论 -
exgcd
拓展欧几里得的模板ll exgcd(ll a, ll b, ll &x, ll &y) //求得这层的x,y (x,y是前的&是引用的意思){if(b == 0) {x = 1; y = 0; return a;} // 最底层ll d = exgcd(b, a%b, y, x); // 这层的x是下层的yy = y - a/b * x; //利用下层的x,y求得这层的yreturn d;}...原创 2020-10-22 14:06:32 · 275 阅读 · 0 评论 -
#716 div2 C题 简单数论 gcd +思维
C. Product 1 Modulo N#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll N = 2e5 + 9;const ll mod = 1e9 + 7;const ll inf = 0x3f3f3f3f;int t = 1, n, m, k;vector <int> ans;int main(){ /*cin >> t; while(t--)原创 2021-07-05 19:09:23 · 134 阅读 · 0 评论 -
#729 div2 C题 简单数论 lcm +思维( 计算贡献
C. Strange Function看数据范围 O(n) 的复杂度肯定是不太行了它要求最小的一个不是它因子的数我们考虑每个数的贡献,2 的贡献是 所以不是2的倍数的数的个数*2,3 是所有不是 3 的倍数的数的个数乘3 …关键在于求不是 x 的倍数的数有多少个...原创 2021-07-04 23:28:43 · 144 阅读 · 0 评论 -
牛客第四场
比赛J题gcd#include<bits/stdc++.h>using namespace std;const int N=1e4+15;typedef long long ll;bool vis[N];int prime[N];ll cnt=0;ll n,k,t;ll f[N], a[N], b[N];const ll mod=1e9+7;ll qpow(ll a,ll b)// 快速幂取模{ ll s=1; while(b) {原创 2021-02-20 11:07:10 · 102 阅读 · 0 评论 -
牛客寒假第一场训练赛
比赛链接B题构造题先找构造括号效率比较高的方法(()) 这种括号里面套括号效率比较高而且合法所以思路就是对所给整数开方,剩余的零头我们用枚举的方法。但是对于一些数据直接用开方得到的数x构造的话,会导致零头太小,不好构造零头第一步构造的是一个对称的括号,有x个左括号,如果零头小于x的话,就不好构造零头。所以如果零头小于x的话,就选择把x缩小1,再构造零头就可以了。代码如下#include<cstdio>#include<cstring>#include<io原创 2021-02-02 16:39:02 · 147 阅读 · 0 评论 -
逆元 专题
题目题解 D #include<bits/stdc++.h>using namespace std;#define ll long longconst ll mod = 1e9+7;ll power(ll a, ll b){ ll res = 1; while(b) { if(b & 1) res = res * a % mod; b >>= 1; a = a * a % mod;原创 2020-11-18 21:49:38 · 411 阅读 · 0 评论 -
逆元
首先介绍同余同余:如果a和b除以c的余数相同,就说a和b关于模c同余,记作a≡b(mod c)。如果两个数a和b的差能够被m整除,那么就说a和b对模数m同余(关于m同余)。比如,28-13=15除以5正好除尽,我们就说28和13对于模数5同于,因为15是5的整数倍。它的另外一层含义就是说:28和13除以5的余数相同。a和b对m同余,我们记作a≡b(mod m)。比如,28与13对5同余可以写作28≡13(mod 5)。...原创 2020-11-18 17:54:10 · 102 阅读 · 0 评论