gcd

莫比乌斯反演与狄利克雷卷积

天大地大妈咪最大 提交于 2019-11-29 14:36:50
积性函数 对 于 g c d ( a , b ) = 1 , 都 有 f ( a b ) = f ( a ) ∗ f ( b ) 。 那 么 f ( n ) 是 积 性 函 数 对于gcd(a,b)=1, 都有 f(ab)=f(a)*f(b)。那么f(n)是积性函数 对 于 g c d ( a , b ) = 1 , 都 有 f ( a b ) = f ( a ) ∗ f ( b ) 。 那 么 f ( n ) 是 积 性 函 数 欧拉函数 ϕ ( n ) \phi(n) ϕ ( n ) 是一个积性函数,对于一个素数 p p p 。有: ϕ ( p ) = p − 1 \phi(p)=p-1 ϕ ( p ) = p − 1 , ϕ ( p k ) = p k − p k − 1 = ( p − 1 ) p k − 1 \phi(p^k)=p^k-p^{k-1}=(p-1)p^{k-1} ϕ ( p k ) = p k − p k − 1 = ( p − 1 ) p k − 1 第一个就根据定义理解,第二个就稍微容斥一下就可以了。 莫比乌斯函数 μ \mu μ 莫比乌斯函数完整定义的通俗表达: 1)莫比乌斯函数 μ ( n ) μ(n) μ ( n ) 的定义域是 N N N 2) μ ( 1 ) = 1 μ(1)=1 μ ( 1 ) = 1 3)当 n n n 存在平方因子时, μ

第一周任务总结(gcd算法)

三世轮回 提交于 2019-11-29 12:16:27
gcd算法总结 gcd算法概念 欧几里得算法,又称辗转相除法,用于求两个自然数的最大公约数 gcd算法时间复杂度 如果有gcd(a,b) (a>b),则此算法的时间复杂度为O(log n)。 gcd算法代码 # include <stdio.h> typedef long long ll ; ll getgcd ( ll a , ll b ) { if ( b == 0 ) return a ; else return getgcd ( b , a % b ) ; } 1.输入两个数据 2.如果b(两个数据中较小的数)等于0,则返回a的值,a即为两数的最大公约数 3.如果b(两个数据中较小的数)不等于0,则返回函数,继续计算(递归)但此时将b的值传给a,a%b(a÷b的余数)传给b,不断更新两个值,直至b为零 4.返回一个数据a(最大公约数) 举个栗子 程序开始运算啦 首先a=123456,b=7890,进入第一轮 发现b(7890)不等于0,所以程序执行return getgcd(b, a%b); a mod(等同于%)b,将此值(5106)传给下一次运算的b, 然后将第一轮运算中的b(7890)传给下一轮运算中的a 进入了下一轮运算,此时a=7890,b=5106 b(5160)依旧不等于零所以重复return getgcd(b, a%b); 。。。。。(经过几轮相同方式的运算

[题解]luogu P2257 YY的GCD

北城余情 提交于 2019-11-29 10:59:39
袁野的gcd 首先可以肯定的是这是一道数论题 所以题目就是: \(\sum_{i=1}^N \sum_{j=1}^M [gcd(i,j)\in prime]\) 接下来就可以愉快的推式子了~ 首先可以按套路枚举 prime 和 gcd \(\sum_{p \in prime}\sum_{i=1}^N\sum_{j=1}^M[gcd(i,j)=p]\) 所以我们显然可以将 \(i\) 和 \(j\) 同时除以 \(p\) ,得到 \(\sum_{p\in prime}\sum_{i=1}^{N}\sum_{j=1}^{M}[gcd(\frac ip,\frac jp)=1]\) 即等价于 \(\sum_{p\in prime}\sum_{i=1}^{\frac Np}\sum_{j=1}^{\frac Mp} [gcd(i,j)=1]\) 到了这里,我们发现对于 \([gcd(i,j)=1]\) 我们可以根据莫比乌斯函数的定义 \(\sum_{d\mid n}\mu(d)\ =[n=1]\) 来进行替换,即 \(\sum_{p \in prime}\sum_{i=1}^{\frac Np}\sum_{j=1}^{\frac Mp}\sum_{d\mid i,d\mid j} \mu(d)\) 我们可以按照套路将 \(d\) 提前,(这里我们默认 \(N\le M\) ) \(\sum

几何向量gcd+暴力枚举——cf552

最后都变了- 提交于 2019-11-28 22:34:55
两两枚举点(xi,yi)(xj,yj)对于第三个点(xk,yk),只要向量ik和ij方向不同即可 只要(xj-xi,yj-yi) 和 (xk-xi,yk-yi)化简后不相同即可,用每个点开个map存下一个gcd的pair即可 #include<bits/stdc++.h> using namespace std; #define N 2005 map<pair<int,int>,int>mp[N]; pair<int,int>p[N]; int n; int main(){ cin>>n; for(int i=1;i<=n;i++){ int x,y; scanf("%d%d",&x,&y); p[i]=make_pair(x,y); } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++)if(i!=j){ int dx=p[j].first-p[i].first; int dy=p[j].second-p[i].second; if(dx==0||dy==0){ if(dx)dx=1;if(dy)dy=1; mp[i][make_pair(dx,dy)]++; } else { int d=__gcd(dx,dy); mp[i][make_pair(dx/d,dy/d)]++; } } long long ans=0; for(int i=1

Polya 定理入门[Burnside引理,Polya定理,欧拉函数]

雨燕双飞 提交于 2019-11-28 19:57:30
\(这篇blog重点讨论Polya的应用, 更详细的证明请百度 .\) \(Burnside引理\) \[L=\frac{1}{|G|}\sum_{i=1}^{|G|}D(a_i)\] \(L\) : 本质不同的方案数. \(G\) : 置换群集合. \(a_i\) : 置换群中的第 \(i\) 个置换. \(D(a_i)\) : 进行 \(a_i\) 这个置换, 状态不会变化的方案 数量. 该引理与下方内容没有太大关系, 可以暂时忽略. \(Problem\) 链接 有 \(N\) 个石子围成一圈, 使用 \(M\) 种颜色染色, 求有多少种本质不同的方案. 借此问题引入 \(Polya定理\) \(↓\) \(Polya定理\) \[L=\frac{1}{|G|}\sum_{i=1}^{|G|}M^{C(g_i)}\] 先丢出公式. 这道题的 置换群 \(G\) : 转 \(0\) 次, 转 \(1\) 次 ...转 \(N-1\) 次, (皆为顺时针转动). 若满足旋转 \(k\) 个位置, 状态和原来相同, 那么 \(i\) 位置颜色 等于 \((i+k)\%N\) 位置颜色, 旋转 \(t\) 次, 仍和原来位置相同, 即 \(i\) 位置与 \((i+t*k)\%N\) 位置颜色相同, 则 \(i\) 旋转 \(t\) 个 \(k\) 次, 一定能回到原来位置,

GCD和XOR题解

≯℡__Kan透↙ 提交于 2019-11-28 15:48:25
由题意 我们要统计1~N中有多少二元组(a,b)满足gcd(a,b) ==a XOR b 首先有如下 性质 : 1.a XOR b >= a-b (a >= b) 证明 :(给个简单的证明 OI证明都不严谨的 ) 在二进制下 a XOR b :b某一位的1才对答案有影响,如果a那位为1那就相当于减,为0相当于加 a 减 b: 同样b的某一为的1才对答案影响,且a的那一位不管是0还是1,都是减 所以 a XOR b 一定 >= a-b 2. a - b >= gcd( a,b ) 证明 : 设gcd(a,b)=c 则a=c*x1,b=c*x2(x1,x2互质且大于等于1)x1>=x2 a - b = c*(x1 -x2)>= c 所以a XOR b >= a-b >= gcd(a,b) 而 a XOR b=gcd(a,b) 所以a XOR b = a - b = gcd (a,b) 到这里解法应该就有很多了,我只分享第一次想到的 懒 令 gcd(a,b)=d,a=d*x1 ,b=d*x2 由上述等式得x1-x2=1; 所以我们外层枚举d,内层枚举b,(a直接得到),然后判断a XOR b 是否等于 a - b 代码如下 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=3e7; 4 int c[N+9];/

HDU - 2588 GCD (欧拉函数)

我与影子孤独终老i 提交于 2019-11-28 15:34:50
原题链接 题意: 给你两个数 \(N,M\) 你要求出 符合条件 \(GCD(X,N)>=M,\space (1<=X<=M)\) 中 \(X\) 的个数 思路: 一开始没有往欧拉函数去想。总想着去筛出所有合适的因子然后统计个数,或者直接暴力for去枚举因子(肯定会TLE) 后面想到了一个互质关系(即是已知 \(GCD(X,N) = q\) \(X = q*a\) , \(N=q*b\) \(则a,b必然互质\) ,然后我们就可以找到一个大于M的因子,开心的去找所有满足 小于 b 的互质个数 即可。 然鹅...这不就是欧拉函数吗?所以最后我们在 用一个欧拉函数即可(离线打表和直接算都可以) code: #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <string> #include <cmath> #define IOS ios::sync_with_stdio(0); cin.tie(0); #define accept 0 #define mp make_pair using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int,

GCD(洛谷 2568)

可紊 提交于 2019-11-28 13:50:07
题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入格式 一个整数N 输出格式 答案 输入输出样例 输入 #1 4 输出 #1 4 说明/提示 对于样例(2,2),(2,4),(3,3),(4,2) 1<=N<=10^7 由题意得 : gcd(x,y)=p (这里我们假设p为一个已知的质数),并且下面的过程都在这个条件下进行,我们不妨设 x<=y<=n 。 令 x=a*p , y=b*p ,则有 gcd(a,b)=1 ,且 1<=a,b<=n/p 。同样不妨设 a<=b (☚什么情况下会等于后面有讲到)。 那么 满足gcd(x,y)=p的数对(x,y)个数 其实就是 满足gcd(a,b)=1的数对个数(a,b) 。(下面用num(x,y)来表示满足gcd(x,y)=p的数对(x,y)个数,num(a,b)同理) 对于b来说,b的取值范围是1~n/p,而a的取值可以是 φ(b)中的任意一个,所以 num(x,y)=num(a,b)=∑φ(b)(b∈[1,n/p]) ,简单来说,就是 1~n/p中所有数的欧拉函数值的和 好,代码已经成功一大半了,但是现在我们并没有p的准确值,p可能是1~n中的任意一个质数。所以我们可以在预处理中先把1~n中的质数(p1、p2……)全部找出来,最后一一枚举这些质数,每枚举一个p,就处理 当gcd(x,y

Polya 定理入门[Burnside引理,Polya定理,欧拉函数]

本秂侑毒 提交于 2019-11-28 10:02:55
$这篇blog重点讨论Polya的应用, 更详细的证明请百度 .$ ___ $Burnside引理$ $$L=\frac{1}{|G|}\sum_{i=1}^{|G|}D(a_i)$$ $L$: 本质不同的方案数. $G$: 置换群集合. $a_i$: 置换群中的第 $i$ 个置换. $D(a_i)$: 进行 $a_i$ 这个置换, 状态不会变化的方案 数量. 该引理与下方内容没有太大关系, 可以暂时忽略. ___ $Problem$ 链接 有 $N$ 个石子围成一圈, 使用 $M$ 种颜色染色, 求有多少种本质不同的方案. 借此问题引入 $Polya定理$ $↓$ $Polya定理$ $$L=\frac{1}{|G|}\sum_{i=1}^{|G|}M^{C(g_i)}$$ 先丢出公式. 这道题的 置换群 $G$: 转$0$次, 转$1$次 ...转 $N-1$ 次, (皆为顺时针转动). 若满足旋转 $k$ 个位置, 状态和原来相同, 那么 $i$ 位置颜色 等于 $(i+k)%N$ 位置颜色, 旋转 $t$ 次, 仍和原来位置相同, 即 $i$ 位置与 $(i+t k)%N$ 位置颜色相同, 则 $i$ 旋转 $t$ 个 $k$ 次, 一定能回到原来位置, 即可以无限旋转, 所以 $i$ 就与 所有 $(i+t k)%N$ 位置呈现一个封闭的 $\color{red}{循环节

@codeforces - 1205E@ Expected Value Again

北慕城南 提交于 2019-11-28 08:25:56
目录 @description@ @solution@ @part - 1@ @part - 2@ @part - 3@ @solution@ @details@ @description@ 给定两个数 n, k,令 s 是一个字符集大小为 k 的随机字符串。 定义 f(s) 表示满足 s 长度为 i 的前缀 = s 长度为 i 的后缀的 i 的数量,要求 1 ≤ i < |s|。 求 f(s)^2 的期望。 Input 只有一行,包含两个整数 n, k(1≤n≤10^5, 1≤k≤10^9),含义如上。 Output 输出期望 mod 10^9 + 7。 Examples Input 2 3 Output 333333336 Input 1 5 Output 0 Input 100 1 Output 9801 Input 10 10 Output 412377396 @solution@ @part - 1@ 其实题目所说的前后缀相等,就是 border 的数量。 因为长度为 k 的 border 等价于长度为 n - k 的周期,为了方便下面的讨论,我们不妨去计算周期的数量。 考虑令随机变量 \(g_i(s)\) ,当 s 含有长度为 i 的周期时为 1,否则为 0。 则可以得到 \(f(s) = \sum_{i=1}^{n-1}g_i(s)\) ,即考虑每种长度的周期的贡献。