数论
文章平均质量分 55
ACkingdom
这个人很懒,什么都没有留下
展开
-
Codeforces Round #698 (Div. 2) D. Nezzar and Board(裴蜀定理,gcd)
题目链接 题意: 给定n个不同的数,每次操作可以选择两个数x,y新增一个数2x−y。给定k,问是否能在若干次操作后得到k。 思路: 首先这个题目要求是2*x-y,那么我们很容易就可以推出,不论我们怎么改变x和y的值,最终的结果表达式的系数都是1。最终的结果一定是 a[i] + ∑(aj−ak),而∑(a[j]−a[k])可以化为∑fi(a[i]−a[i−1])。根据裴蜀定理,我们不需要考虑fi的值,我们只需要考虑给定的整数(a[i]−a[i−1])即可,所以我们只需要求出每一个i>=2的a[i]−a[原创 2021-02-01 12:23:17 · 298 阅读 · 0 评论 -
Codeforces Round #641 (Div. 2)-C. Orac and LCM(数论,gcd,lcm)
题目链接 题意: 给你一个数组,求数组中所有元素之间的lcm的gcd。 思路: 公式推理题(暴力跑铁定T),最终你可以推理得到这个公试:GCD(LCM(a,b),LCM(a,c))=a*GCD(b,c)/GCD(a,b,c); 所以你只需要求出一个元素之后所有元素的GCD,再放入公式就可以得出答案了。 代码: #include<bits/stdc++.h> using namespace std; #define int long long #define IOS ios::sync_with_原创 2020-05-22 19:43:42 · 900 阅读 · 0 评论 -
Educational Codeforces Round 86 (Rated for Div. 2)-C. Yet Another Counting Problem(数论,gcd)
添加链接描述 题意: 给你三个数a,b,q,查询q次,每次一个区间,寻找该区间内有多少个x,使得(x%b)%a!=(x%a)%b. 思路: 先求a,b的最小公倍数,每个最小公倍数是一个循环,我们只需要求所查询的区间内有多少个完整的最小公倍数区间,再加上其余不完整的部分就ok。 代码: #include<bits/stdc++.h> using namespace std; const int N=1e5+5; const int inf=0x7fffffff; const int mod=1e9原创 2020-05-21 20:35:49 · 189 阅读 · 0 评论 -
Codeforces Round #641 (Div. 2)-D. Orac and Medians(为了避免重复率过高而存在的小括号)
题目 题意: 给你一组数字,你可以将任意区间的数字全部变为该区间的中位数(若区间长度为偶数则取左),问是否能将该数组中的数字全部变为同一个数字k。 思路: 如果我们能够变出两个或以上相连并且相同数,那么这两个数就可以同化周围的所有数字,当他同化到值为k的数字的旁边时,如果该数字比k小,那么我们无法将该数字变成k,因为题目中说了“若区间长度为偶数则取左”,所以我们的目标就变成了:变出两个或以上相连且相同的比k大的数,这样我们就能够通过这两个数将整个数组中的数字全都变成k(出现了!究极白嫖怪!)。那么我们该如何原创 2020-05-14 20:39:54 · 173 阅读 · 0 评论 -
洛谷 P1072 Hankson的趣味题(最大公约数,最小公倍数,数论,思维)
题目 题意: 已知正整数a0,a1,b0,b1,设某未知正整x满足gcd(a0,x)==a1,lcm(b0,x)==b1。求满足该条件的x的个数。 思路: 首先要知道gcd(最大公约数)和lcm(最小公倍数)该如何求。 求最大公约数: int gcd(int a,int b) { return b==0?a:gcd(b,a%b); } 求最小公倍数: int lcm(int a,int b) { return a*b/gcd(a,b); } 读题可以得出,x是a1的倍数,同时也是b1的因原创 2020-05-13 20:48:53 · 338 阅读 · 0 评论