首页 > 其他分享 >CF1665D GCD Guess

CF1665D GCD Guess

时间:2023-03-14 19:35:34浏览次数:39  
标签:Guess le GCD 30 CF1665D le2 gcd

个人思路:
\(\gcd(x+a,x+b) = gcd(x+a,b-a)\)。

考虑固定 \(a\),然后试出来 \(x+a\) 所有因子。
然后发现质数根本试不完。

发现询问 \(30\) 次,\(2^{30}\) 刚好比 \(x\) 大一点。

考虑 \(2\) 进制拆分,从低往高,依次去试每一位:
第 \(i\) 次,我们需要判断第 \(i\) 位,是 \(0\) 还是 \(1\)。由于我们知道 \(x\) 的 \(1\sim i-1\) 位,我们可以让 \(x+a\) 为 \(2^{i-1}\) 次方的倍数,让 \(b-a = 2^i\)。通过 \(gcd(x+a,2^i)\) 来判断第 \(i\) 位的情况,如果返回值为 \(2^{i-1}\),则第 \(i\) 位为 \(1\),返回值为 \(2^i\),则第 \(i\) 位为 \(0\)。不难发现,\(a\le2^{i-1},b-a=2^i,b\le2^i+2^{i-1}\)。因为 \(x < 2^{30}\),所以只用判断前 \(30\) 位,\(a,b \le 2^{30}+2^{29} < 2\times 10^9\),刚好满足题目要求。

那么 \(a\) 具体是多少呢?我们初始令 \(a=1\),因为题目要求 \(1\le a,b\le 2\times 10^9\),然后如果 \(x+a\) 的第 \(i\) 位是 \(1\),我们让 \(a \leftarrow a + 2^{i-1}\),这样判断第 \(i+1\) 位时,\(x+a\) 就是 \(2^i\) 的倍数了。

可能是实现时的问题,我的代码必须要开 long long 才能过。

标签:Guess,le,GCD,30,CF1665D,le2,gcd
From: https://www.cnblogs.com/Mysterious-Cat/p/17216010.html

相关文章

  • Binary GCD 学习笔记
    算是一点杂项吧,感觉没什么机会用上。0x00前言有时你需要大量且快速的求gcd,像P5435。但是对值域预处理gcd又很麻烦,所以这时候我们可以考虑BinaryGCD。0x01原理......
  • C++快速求解最大公因数 | gcd库函数
    1.介绍gcd全称:greatestcommondivisor使用__gcd(intx1,intx2)函数可以高效、迅速得到x1,x2两个数的最大公因数。省去手写底层代码,专注代码逻辑的研究 2.注......
  • CF1034A Enlarge GCD 题解
    题意简述:删去最少的数使所有的数的\(\text{gcd}\)增加。解:先对每个数除以所有数的\(\text{gcd}\),然后剩下的需要找到所有数的质因子,找到一个最多的序列中数拥有的质......
  • LC 2447. Number of Subarrays With GCD Equal to K
    2447.NumberofSubarraysWithGCDEqualtoK思路与题解最大公约数,Euclideanalgorithms算法证明:如果我们有2个数:\(a\)和\(b\),不妨假设\(a>b\),当不能整除的情......
  • 「二元一次不定方程(exgcd)」P5656 【模板】二元一次不定方程 (exgcd)
    知识点:exgcdLink:Luogu为什么之前没写?因为这题出的挺晚,出的时候都忘了嘻嘻主要抄袭对象:https://www.luogu.com.cn/blog/McHf/p5656-exgcd。简述\(T\)组数据,每组数据......
  • 【ABC162E】Sum of gcd of Tuples (Hard)
    updon2022-7-13:修改若干不合适叙述。一、题意很明了,给出\(n,k\),求下面这个复杂式子的值:\[\sum_{a_1=1}^k\sum_{a_1=1}^k\cdots\sum_{a_{n-1}=1}^k\sum_{a_n=1}^k\gc......
  • Codeforces Round #838 (Div. 2)-D. GCD Queries-GCD、交互
    题目:https://codeforces.com/problemset/problem/1762/D有一个0~n-1的排列,你要在至多2n次询问中找到两个位置x,y,使得\(p_x,p_y\)至少有一者为0.每次询问可以问两个不同的i......
  • codeforces 1047C. Enlarge GCD(数学)
    题意:给出n个数,求出最少删除几个数可以扩大最大公因子。AC代码:#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<set>#include<map>#includ......
  • 扩展欧几里得(exgcd)
    这里先说一下最大公约数怎么求,辗转相除法都会用,这里讲一下站桩相除法的原理。例如两个数假设这两个数大小,设是这两个数的最大公约数。可得因为这里都是一个正整数不会对最......
  • HDU 5223 GCD
    Description:Inmathematics,thegreatestcommondivisor(gcd......