gcd

[CQOI2015]选数

怎甘沉沦 提交于 2020-03-01 22:45:27
[CQOI2015]选数 从[L,H]中可重复地选出N个数,问其gcd等于K的方案 \(mod\ 10^9+7\) ,1<=N,K<=10^9,1<=L<=H<=10^9,H-L<=10^5。 解 法一:直接 转换为Mobius问题,不难有 \[ans=\sum_{i_1=L}^H\sum_{i_2=L}^H...\sum_{i_N=L}^H(gcd(i_1,i_2,...,i_N)==k)\] 于是设 \[f(k)=\sum_{i_1=L}^H\sum_{i_2=L}^H...\sum_{i_n=L}^H(gcd(i_1,i_2,...,i_n)==k)\] \[F(k)=\sum_{i_1=L}^H\sum_{i_2=L}^H...\sum_{i_N=L}^H(k|gcd(i_1,i_2,...,i_N))=([\frac{H}{k}]-[\frac{L-1}{k}])^N\] 由Mobius反演定理代入有 \[ans=\sum_{k|d}([\frac{H}{d}]-[\frac{L-1}{d}])^N\mu(d/k)=\] \[\sum_{d=1}^{[H/k]}([\frac{H}{dk}]-[\frac{L-1}{dk}])^N\mu(d)\] 显然左式可以整除分块,而至于后式只需要快速维护其前缀和,注意到N很大,于是用杜教筛优化即可。 参考代码: #include

BZOJ_2820_YY的GCD_莫比乌斯反演

我怕爱的太早我们不能终老 提交于 2020-03-01 14:56:31
BZOJ_2820_YY的GCD_莫比乌斯反演 题意&分析: $\sum\limits_pis[p]\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}[gcd(i,j)=p]$ $=\sum\limits_pis[p]\sum\limits_{i=1}^{\lfloor \frac{n}{p}\rfloor}\sum\limits_{j=1}^{\lfloor \frac{m}{p}\rfloor}[gcd(i,j)=1]$ $=\sum\limits_pis[p]\sum\limits_{i=1}^{\lfloor \frac{n}{p}\rfloor}\sum\limits_{j=1}^{\lfloor \frac{m}{p}\rfloor}[gcd(i,j)=1]$ $=\sum\limits_pis[p]\sum\limits_{i=1}^{\lfloor \frac{n}{p}\rfloor}\sum\limits_{j=1}^{\lfloor \frac{m}{p}\rfloor}\sum\limits_{d|gcd(i,j)}\mu(d)$ $=\sum\limits_pis[p]\sum\limits_{d=1}^{\lfloor \frac{n}{p}\rfloor}\mu(d)\sum\limits_{i=1}^{\lfloor

iOS多线程编程技术NSThread; NSOperation、GCD三者使用详解

两盒软妹~` 提交于 2020-03-01 14:35:03
三种方式的优缺点介绍: 1)NSThread 优点: NSThread 比其他两个轻量级 缺点: 需要自己管理线程的生命周期,线程同步。线程同步对数据的加锁会有一定的系统开销 2)Cocoa NSOperation 优点: 不需要关心线程管理, 数据同步的事情,可以把精力放在自己需要执行的操作上。 Cocoa operation相关的类是NSOperation, NSOperationQueue. NSOperation是个抽象类,使用它必须用它的子类,可以实现它或者使用它定义好的两个子类: NSInvocationOperation和NSBlockOperation. 创建NSOperation子类的对象,把对象添加到NSOperationQueue队列里执行。 3) GCD (全优点) Grand Central dispatch(GCD)是Apple开发的一个多核编程的解决方案。在iOS4.0开始之后才能使用。GCD是一个替代NSThread, NSOperationQueue,NSInvocationOperation等技术的很高效强大的技术。 下面我用简单易于理解的代码实例来介绍NSThread在开发实践中的使用,具体使用时可以根据实际情况进行扩展: 一、NSThread的使用(基本已过时) [html] view plain copy #import < UIKit

[数论]莫比乌斯反演3

杀马特。学长 韩版系。学妹 提交于 2020-03-01 08:53:41
索引 莫比乌斯反演1 定理 莫比乌斯反演2 证明 莫比乌斯反演3 技巧 实用技巧 1、 \[[gcd(i,j)=1]=\sum_{d|gcd(i,j)}\mu(d)\] 证明 根据性质1,其实就是莫比乌斯函数的定义 莫比乌斯函数的性质1 \[\sum_{d|n}\mu(d)=[n=1]\] 那么我们将gcd(i,j)带入n即可得到 \[\sum_{d|gcd(i,j)}\mu(d)=[gcd(i,j)=1]\] 证毕。 2、 求下式 \[\sum_{j=1}^{n}\sum_{j=1}^{m}gcd(i,j),(n<m)\] 因为 \[\sum_{d|n}\varphi(d)=n\] 我们按照套路将上式的要求的式子的 \(n\) 替换为 \(gcd(i,j)\) 即原式变换为: \[\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{d|gcd(i,j)}\varphi(d)\] 按照套路将d分类得 \[\sum_{d=1}^{n}\varphi(d)\times\lfloor\frac{n}{d}\rfloor\times\lfloor\frac{m}{d}\rfloor\] 结束。 3、 这是套路3(见下)的简化版 将一般求和式转为枚举式 例如下式: \[\sum_{i=1}^{\lfloor\frac{a}{d}\rfloor}\sum_{j=1}^{

数论入门

半世苍凉 提交于 2020-03-01 08:47:13
abstract 线性筛与容斥 本文解决以下问题: \(\sum\limits ^{n}_{i=1} i[ gcd( i,n) =1] =\frac{N*\phi (N)}{2}\) \(\sum\limits ^{n}_{i=1}\sum\limits ^{n}_{i=1}[ gcd( i,j) =p]\) \(\sum\limits ^{n}_{i=1} gcd( i,n) \\) \(\sum\limits ^{n}_{i=1}\sum\limits ^{n}_{j=i+1} gcd( i,j)\) \(\sum\limits ^{n}_{i=1}\sum\limits ^{m}_{j=1} gcd( i,j) *2-1\) 技巧: 线性筛求积性函数 nlogn(Eratosthenes)筛求约数和 欧拉函数性质+代数(求和)变换 求gcd,lcm的和 莫比乌斯函数求容斥 倒着更新容斥 \(\ \sum\limits _{d|n} d = \sigma(n) = \frac{p_1^{e_1 + 1} - 1}{p_1 - 1} \cdot \frac{p_2^{e_2 + 1} - 1}{p_2 - 1} \cdots \frac{p_k^{e_k + 1} - 1}{p_k - 1}\) proofs 最关键公式之一 \(\sum\limits ^{n}_{i=1}

两个桶兑出特定容积的水

丶灬走出姿态 提交于 2020-02-29 22:18:12
面试的时候,可能会经常碰到这样一个问题:嘉定区有两个桶,一个容量为 3 升,一个容量为 5 升,我们怎么能够不通过其他度量工具的帮助兑出 1 升的水来。假定水是无限的。 !! 此处限制条件:会给定先倒入哪个桶,并且在倒的过程中,不能出现如下情况:给定先倒的桶空了,而另一个桶是满的。 例如题: https://exercism.io/my/solutions/3b849bba3ee840ccac12eb7ca734ba8e 问题分析 如果单纯针对这个问题来看,相信我们还是可以很容易的得到一个推导过程。既然我们有两个桶,一个是 3 升,一个是 5 升,那么我们可能需要将一个桶装满水,然后倒到另外一个桶里, 通过将一个桶倒满而另外一个桶可能还有盈余来达到最终兑换出期望容量的水的目的 。按照这个思路,我们可以开始第一步分析。 初步分析 上个例子问题中,我们整个兑水的过程可以描述如下(假设先倒入 3 升的桶): (3, 0) 将 a 桶倒满; (0, 3) 将 a 桶倒入 b 桶;此情况可以出现,因为虽然 a 桶满了,但是 b 桶未满 (3, 3) 将 a 桶倒满; (1, 5) 将 a 桶倒入 b 桶 2 升,b 桶仅剩下 2 升的容积。此时 a 桶剩下 1 升,即为所求。 从这个特定的问题本身,似乎没什么特殊的,我们就这么来回的倒腾似乎有点靠运气。 可是,如果我们再深层次的去想想。

gcd(裴蜀定理)——愤怒的巨巨

孤者浪人 提交于 2020-02-28 23:30:08
gcd(裴蜀定理)——愤怒的巨巨 题目描述: 在511没人敢惹盼成巨巨,因为盼成巨巨是我们511的学神! 周末,巨巨让乙超大佬去买一根香蕉,可你是知道的,买来的香蕉很可能是坏的,经过乙超大佬的长期调研,源源家香蕉中次品率为p,因为乙超超BYQ(too you qian),如果买到坏香蕉,他会认栽,但他害怕巨巨愤怒,他会继续买下去,直到买到好香蕉为止! 他想知道他必须买香蕉的个数的期望值,如果注定他买不到好香蕉请输出 ”Sorrry,JuJu!” 输入描述: 输入实数p (0≤p≤1且保证p的小数位不超过6位) 输出描述: 输出一行: 如果买不到好香蕉,输出”Sorrry,JuJu!”(忽略双引号) 否则输出期望值的最简分数形式:c/d. 示例1 输入 0.5 输出 2/1 示例2 输入 1.00 输出 Sorrry,JuJu! # include <cstdio> int gcd ( int x , int y ) { if ( y == 0 ) { return x ; } else { return gcd ( y , x % y ) ; } } int main ( ) { double a ; scanf ( "%lf" , & a ) ; if ( a >= 1 ) { printf ( "Sorrry,JuJu!\n" ) ; } else { int s =

__gcd”: 找不到标识符

跟風遠走 提交于 2020-02-28 17:59:12
__gcd无法调用 求解,明明调用了algorithm的库,但是执行的时候总是报错"__gcd找不到标识符" # include <iostream> # include "algorithm" using namespace std ; class Solution { public : bool canMeasureWater ( int x , int y , int z ) { //int k = __gcd(x, y); if ( x + y < z ) return false ; if ( x == z || y == z || x + y == z ) return true ; return z % __gcd ( x , y ) == 0 ; } } ; int main ( ) { Solution s ; cout << s . canMeasureWater ( 3 , 4 , 5 ) ; } 来源: CSDN 作者: Liiu_077 链接: https://blog.csdn.net/qq_39439206/article/details/104557189

数论模板总结 -- 持续更新

孤者浪人 提交于 2020-02-28 12:36:58
一些常用的简单数论模板以及书中的定理 组合数取模 1:N M < 1000, 杨辉三角双循环 ,边加边取模(代码未添加取模) 1 c[1][1] = c[1][0] = 1; 2 for(int i = 2; i <= 50; i++){ 3 c[i][0] = 1; 4 for(int j = 1; j <= i; j++){ 5 c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % mod;6   } 7 } 2. C(n, k) = C(n, k - 1) * (n - k + 1) / k ,对2~maxn的逆元打表后,利用这个公式可以O(n)时间内求出C(n, k) 1 void getcom(int x){ 2 c[0] = c1[0] = 1; c[1] = x; c1[1] = n - x; 3 for(int i = 2; i <= x; i++) 4 // inv[i] 指i的逆元,可以使用扩展gcd打表 5 c[i] = c[i - 1] % mod * (x - i + 1) % mod * inv[i] % mod; 6 } GCD求最大公约数 1 //欧几里得算法,gcd() 2 int gcd(int a, int b){ 3 return b == 0 ? a: gcd(b, a%b); 4 } 扩展欧几里得算法

AYOJ Hankson的趣味题(枚举)

眉间皱痕 提交于 2020-02-28 12:01:10
题目描述   Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Hankson。现 在,刚刚放学回家的Hankson 正在思考一个有趣的问题。 今天在课堂上,老师讲解了如何求两个正整数c1 和c2 的最大公约数和最小公倍数。现 在Hankson 认为自己已经熟练地掌握了这些知识,他开始思考一个“求公约数”和“求公 倍数”之类问题的“逆问题”,这个问题是这样的:已知正整数a0,a1,b0,b1,设某未知正整 数x 满足: 1. x 和a0 的最大公约数是a1; 2. x 和b0 的最小公倍数是b1。 Hankson 的“逆问题”就是求出满足条件的正整数x。但稍加思索之后,他发现这样的 x 并不唯一,甚至可能不存在。因此他转而开始考虑如何求解满足条件的x 的个数。请你帮 助他编程求解这个问题。 输入格式   输入第一行为一个正整数n,表示有n 组输入数据。   接下来的n 行每 行一组输入数据,为四个正整数a0,a1,b0,b1,每两个整数之间用一个空格隔开。输入 数据保证a0 能被a1 整除,b1 能被b0 整除。 数据规模和约定   对于 50%的数据,保证有1≤a0,a1,b0,b1≤10000 且n≤100。   对于 100%的数据,保证有1≤a0,a1,b0,b1≤2,000,000,000 且n≤2000。 输出   输出共n 行