gcd

退役后做题记录

老子叫甜甜 提交于 2020-02-08 11:08:23
退役后做题记录 AGC030E Less than 3 神仙题Orz 首先,如果你修改了一个位置 \(i\) ,那么 \(i-1\) , \(i+1\) 一定不同,否则一定会出现连续三个一样的 将0和1之间插入一条红线,1和0之间插入一条蓝线。那么红蓝线一定交替出现 修改相当于移动一条线,移动方案相当于一个匹配(位置1以前、位置n以后可以看做有无数条红蓝交替的线) 最妙的是,“不能出现连续三个一样的”限制没有了(因为一定能找到方案) 枚举匹配的方案即可 https://atcoder.jp/contests/agc030/submissions/6933519 AGC029B Garbage Collector 首先,取垃圾的代价固定,为 \(nX\) ,可以无视。 设取了 \(K\) 次垃圾,放垃圾代价就会是 \(KX\) 。 考虑一次取垃圾的过程,取了 \(x_1<x_2<\ldots<x_s\) 处的垃圾。 显然一定会先走到 \(x_s\) ,然后返回途中收辣鸡。 推一下,代价会是 \(5x_s+5x_{s-1}+7x_{s-2}+9x_{s-3}+\ldots+(2s+1)x_1\) 。 收了 \(K\) 次辣鸡,会有 \(2K\) 个系数 \(5\) , \(K\) 个系数 \(7,9,11,\ldots\) ,可以任意乘给 \(x\) 显然最大的 \(2K\) 个拿 \

Educational Codeforces Round 81 D-Same GCDs(欧拉函数)

偶尔善良 提交于 2020-02-08 10:10:59
题面 给定两个数a和m,在 [ 0 , m ) [0,m) [ 0 , m ) 内寻找有多少个x使 g c d ( a , m ) = g c d ( a + x , m ) gcd(a,m)=gcd(a+x,m) g c d ( a , m ) = g c d ( a + x , m ) 1<=a<m<=10 10 分析 询问了队友后得到了正确的建模思路。。。 可以先把问题简化,通过gcd(a,m)化简一波: g c d ( a / g c d ( a , m ) , m / g c d ( a , m ) ) = 1 gcd(a/gcd(a,m),m/gcd(a,m))=1 g c d ( a / g c d ( a , m ) , m / g c d ( a , m ) ) = 1 为表达简单,使 a = a / g c d ( a , m ) , m = m / g c d ( a , m ) a=a/gcd(a,m),m=m/gcd(a,m) a = a / g c d ( a , m ) , m = m / g c d ( a , m ) 注意到此时问题变成了一个互质问题 在 [ 0 , m ) [0,m) [ 0 , m ) 内寻找有多少个x使 1 = g c d ( a + x , m ) 1=gcd( a + x, m) 1 = g c d ( a + x , m

[国家集训队] Crash的数字表格 - 莫比乌斯反演,整除分块

 ̄綄美尐妖づ 提交于 2020-02-05 15:55:42
考虑到 \(lcm(i,j)=\frac{ij}{gcd(i,j)}\) \(\sum_{i=1}^n\sum_{j=1}^m\frac{ij}{gcd(i,j)}\) \(\sum_{d=1}^{n}\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==d]\frac{ij}{d}\) \(\sum_{d=1}^{n}\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}[gcd(i,j)==1]{ijd}\) \(=\sum_{d=1}^{n}d\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}[gcd(i,j)==1]{ij}\) 看后面 \(\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}[gcd(i,j)==1]{ij}\) \(=\sum_{i=1}^{x}\sum_{j=1}^{y}[gcd(i,j)==1]{ij}\) 考虑反演 \(f(d)=\sum_{i=1}^{x}\sum_{j=1}^{y}[gcd(i,j)==d]{ij}\) \(G(d)=\sum_{i=1}^{x}\sum_{j=1}^{y}[d|gcd(i,j)]{ij}\) \(G(d)=d^2\sum_{i=1}^{x/d}\sum_{j=1}^{y/d}[1|gcd(i,j)]{ij}\) \(G(d)=d^2\sum_{i=1}^{x

Codeforces 1295 D. Same GCDs

落花浮王杯 提交于 2020-02-05 04:46:47
Codeforces 1295 D. Same GCDs 题意: 给定两个整数 \(a,m\leq10^{10}\) 。 问有多少个 \(0\leq x<m\) 有 \(gcd(a,m)=gcd(a+x,m)\) 。 思路: 把结果写成表达式 \[ \sum_{x=0}^{m-1}[gcd(a,m)=gcd(a+x,m)] \] 根据gcd的计算过程有: \[ \sum_{x=0}^{m-1}[gcd(a,m)=gcd((a+x)mod\ m,\ m)] \] 我们知道 \(x\) 的取值范围在 \([0,m-1]\) ,其实就是相当于把 \(a\) 在数轴上向右平移了这么多个单位,取模之后又回到了 \([0,m-1]\) 的区间。 所以有 \[ \sum_{i=0}^{m-1}[gcd(i,m)=gcd(a,m)] \] 提取 \(gcd(a,m)=d\) 。 \[ \sum_{i=0}^{m-1}[gcd(i,m)=g]\\\sum_{0\leq i<m}^{g|i}[gcd(\frac{i}{g},\frac{m}{g})=1] \] 这个就是 \(\varphi(\frac{m}{g})\) 。 #include<bits/stdc++.h> using namespace std; typedef long long ll; ll a, m; ll phi(ll x) {

关于扩展欧几里得定理

允我心安 提交于 2020-02-04 18:06:03
链接地址 关于扩展欧几里得定理 众所周知,扩展欧几里得定理是用来求形如ax+by=c(a,b,c皆为整数)这样的方程的一组解[注,仅是一组解]的定理 该方程有解的条件 : 要使ax+by=c(a,b,c皆为整数) 有解,我们设k=gcd(a,b),可以将原方程写成\frac{a}{k}kx+\frac{b}{k}ky=c的形式 即 k(\frac{a}{k}x+\frac{b}{k}y)=c \because a,b,c均为整数 \therefore (\frac{a}{k}x+\frac{b}{k}y)一定是整数即k(\frac{a}{k}x+\frac{b}{k}y)一定是k的倍数 \therefore k|c 即 gcd(a,b)|c // k|c数学里为 c%k=0 由此可见,该方程有解的条件为c%gcd(a,b)=0 来源: CSDN 作者: “黎明” 链接: https://blog.csdn.net/weixin_43382740/article/details/104171054

hdu2504(找最大公约数gcd)

☆樱花仙子☆ 提交于 2020-02-04 14:51:48
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2504 题目描述 思路 就是写个gcd函数直接调用就行了。直接看代码吧 ac代码 # include <stdio.h> # define N 100000 int gcd ( int a , int b ) { return b == 0 ? a : gcd ( b , a % b ) ; } int main ( ) { int n , m ; int i ; int t ; scanf ( "%d" , & t ) ; while ( t -- ) { scanf ( "%d%d" , & n , & m ) ; for ( i = m + 1 ; i < N ; i ++ ) { if ( gcd ( n , i ) == m ) break ; } printf ( "%d\n" , i ) ; } return 0 ; } 来源: CSDN 作者: zhoupingqi2017 链接: https://blog.csdn.net/zhoupingqi2017/article/details/104167653

Codeforces 1295D Same GCDs

牧云@^-^@ 提交于 2020-02-03 17:29:14
题目链接 link Solution 这是一道结论题,有两个做法,分别用了欧拉函数或一点点莫比乌斯反演 (这里只放欧拉函数的做法) 设 \(d=gcd(m,a)\) \[gcd(\frac{a}{d},\frac{m}{d})=gcd(\frac{x+a}{d},\frac{m}{d})=1\] 从互质的关系入手进行考虑 所以答案就是 \(\varphi(\frac{m}{d})\) 这个东西是可以在时限内求解的 CODE #include<bits/stdc++.h> using namespace std; #define int long long namespace yspm{ inline int read() { int res=0,f=1; char k; while(!isdigit(k=getchar())) if(k=='-') f=-1; while(isdigit(k)) res=res*10+k-'0',k=getchar(); return res*f; } inline void work() { int a=read(),m=read(),ans; int gcd=__gcd(a,m); m/=gcd; ans=m; for(int i=2;i*i<=m;++i) { if(m%i==0) { ans=ans/i*(i-1); while(m%i=

2020.01.30日常总结

我们两清 提交于 2020-01-31 11:21:16
洛 谷 P 2568 G C D \color{green}{洛谷P2568\ \ \ GCD} 洛 谷 P 2 5 6 8 G C D 【 题 意 】 : \color{blue}{【题意】:} 【 题 意 】 : 给定 N ( 1 ≤ N ≤ 1 × 1 0 7 ) N(1 \leq N \leq 1 \times 10^7) N ( 1 ≤ N ≤ 1 × 1 0 7 ) ,求有多少对 ( x , y ) (x,y) ( x , y ) 满足 1 ≤ x , y ≤ N 1 \leq x,y \leq N 1 ≤ x , y ≤ N 且 g c d ( x , y ) gcd(x,y) g c d ( x , y ) 为素数( g c d ( x , y ) gcd(x,y) g c d ( x , y ) 表示 x , y x,y x , y 的 最 大 公 约 数 \color{red}{最大公约数} 最 大 公 约 数 )。 【 思 路 】 : \color{blue}{【思路】:} 【 思 路 】 : 首先,我们求出 1 − N 1-N 1 − N 中的所有的素数,然后我们枚举 g c d ( x , y ) gcd(x,y) g c d ( x , y ) 。因为 1 1 1 到 1 × 1 0 7 1 \times 10^7 1 × 1 0 7

Same GCDs

故事扮演 提交于 2020-01-31 11:19:08
D - Same GCDs 参考: 欧拉函数 CF1295D Same GCDs 题意很明显要求出当 \(k\in [a,a+m),gcd=gcd(a,m)\) 时,满足 \(gcd(k,m)=gcd\) 的 \(k\) 的个数,由欧拉函数可以转换为 \(gcd(k/gcd,m/gcd)=1,k\in [a,a+m)\) , \(a\) 和 \(m\) 肯定是 \(gcd\) 的倍数,那么假设 \(a=x*gcd,m=y*gcd\) ,令 \(i=k/gcd\) ,那么 \(i\) 的取值范围为 \([x,x+y)\) ,那么最终要求的东西就是当 \(i\in [x,x+y)\) 时,满足 \(gcd(i,y)=1\) 的 \(i\) 的个数。 把 \(i \in [x,x+y)\) ,分成两个区域 \([x,y]\) 和 \((y,x+y)\) 我们先讨论 \(i\in(y,x+y)\) 时,由欧几里得定理可以得出 \(gcd(i,y)=gcd(y,i\%y)=gcd(i\%y,y)\) ,再由 \(i\in (y,x+y)\) 可以化简所求东西为求 \(i\in (0,x)\) 时,满足 \(gcd(i,y)\) 的 \(i\) 的个数,而我们把这个区间与 \([x,y]\) 进行合并,就可以发现,我们要求的就是 \(i\in [1,y]\) 时满足 \(gcd(i,y)=1\

洛谷网校:数论(一)

£可爱£侵袭症+ 提交于 2020-01-29 21:36:19
2020.1.29 数论(一) 1.引入 一开头讲了整除,质数,合数,质因数分解,带余除法,两数同余等小学基础知识,不加赘述。 有关推论: 1.约数总是成对出现 若 k 是 n 的约数, 则 (n/k) 也是 n 的约数。 在一对约数中,必有一个不大于 √ n,另一个不小于 √ n。 因此枚举 1..√ n 就能求出 n 的所有约数。 2.整除的表示 a|b表示:b%a=0 3.同余的表示 a ≡ b(mod c) 与 c|(a − b) 等价,表示:a%c=b%c 2.最大公约数 gcd(a,b)=gcd(a,a+b)=gcd(a,ka+b) gcd(ka,kb) = k·gcd(a,b) gcd(a,b,c)=gcd(gcd(a,b),c) 3.欧几里得算法(辗转相除法) a>=b的前提下 由gcd(a,b)=gcd(a,ka+b)推得:gcd(a,b)=gcd(b,a%b)(k为a/b(整除)的相反数) 所以每次较大数都减少至少一半(取模运算,易证) 所以时间复杂度为O(log~2~n) 4.裴蜀定理 若d=gcd(a,b),则对任意整数x,y有d|(ax + by)成立(理所当然地成立) 且一定有x,y满足ax+by=d(18和24:gcd(18,24)=6,(-1)·18+(1)·24=6) 5.扩展欧几里得算法 给上面的裴蜀定理推论的方程 ax+by=d 求解