首页 > 其他分享 >GCD

GCD

时间:2023-07-31 11:11:35浏览次数:45  
标签:le gcd int 复杂度 lld 公因数 GCD

GCD 洛谷

题目描述

一张图有 \(n\) 个节点,编号为 \(1,2,3,\dots,n\)。其中 \(i\) 号节点会向 \(j\) 号节点连一条边权为 \(|i-j|\) 的无向边,当且仅当 \(\gcd(i,j)=i,\operatorname{lcm}(i,j)=j\) 时连边。现询问 \(q\) 次,每次询问求 \(x\) 到 \(y\) 的最短路径。


输入格式

第一行一个 \(T\),表示数据组数。

每组数据的第一行两个正整数 \(n,q\),表示节点数和询问次数。

接下来 \(q\) 行,每行两个正整数 \(x,y\),表示起点和终点。


输出格式

对于每组询问,输出一个正整数。相邻两个输出以换行符隔开。


样例输入

1
6 4
1 4
3 5
2 5
2 4

样例输出

3
6
5
2

提示

对于 \(100\%\) 的数据,\(1\le T\le10^6\),\(1\le n,q\le10^6\),\(1\le x,y\le n\),\(1\le \sum n,\sum q\le10^6\)。

请使用更快的 IO 方式


先看时间复杂度,预测时间复杂度为 \(O(logn)\),也就是说每组数据必须是 \(log\) 级别的时间复杂度

\(log\) 级别的算法就那几个,所以我们先看看题目的要求

很明显,每次询问不一定保证两个数肯定有一条边,那么便考虑是否有两条边的路可以走

这是肯定有的(\(x->1->y\)),而且这个中间点肯定为两个数的公因数(公倍数和公因数完全一样,但考虑到公倍数可能会超出限制,所以不考虑),那么便可以设一个 \(k\) ,且 \(k|x,k|y\),又要满足 \(\min(x-k+y-k)\)

已经很明显了,\(k\) 就是两个数的最大公因数

时间复杂度也是 \(O(logy)\)

\(Code:\)

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;

int gcd(int x,int y){
	if(y==0) return x;
	return gcd(y,x%y);
}
signed main()
{
	int t,q;scanf("%lld",&t);
	while(t--){
		scanf("%lld%lld",&n,&q);
		while(q--){
			int ans=0;
			int x,y;scanf("%lld%lld",&x,&y);
			if(x>y) swap(x,y);
			int gc=gcd(x,y);
			ans=x-gc+y-gc;
			printf("%lld\n",ans);
		}
	}
	return 0;
}

标签:le,gcd,int,复杂度,lld,公因数,GCD
From: https://www.cnblogs.com/HEIMOFA/p/17592919.html

相关文章

  • hdu7319 String and GCD
    StringandGCD首先我们需要用kmp的fail建树,然后需要利用到欧拉反演。\[n=\sum_{d|n}\varphi(d)\]对于这题来说\[(i,j)=\sum_{d|(i,j)}\varphi(d)=\sum_{d|i,d|j}\varphi(d)\]那么我们只需要用一个桶存每个约数从根到当前节点出现了多少次。然后枚举约数也有一个技巧,具体......
  • 【模板】数论基础:exGCD,exCRT,inverse,Lucas,BSGS,primitive root
    7.29数论WIP\(a\equivb\pmodp\Rightarrow\frac{a}{d}\equiv\frac{b}{d}\pmod{\frac{p}{d}},d=\gcd(a,b,p)\)。exGCD若\((a,b)=1\),则\(0\leqx<b\),\(ax\bmodb\)互不相同,有一个是\(1\)。证明:\(ax_1\equivax_2\pmodb\)则\((x_1-x_2)a|b\),因为......
  • 题解 HDU5726【GCD】/ LGT353762【Soso 的最大公约数】
    Problem给你一个长为\(N(1\leqN\leq1\times10^5)\)的整数序列:\(a_{1},\cdots,a_{n}(0<a_{i}\leq1\times10^9)\)。有\(Q(1\leqQ\leq1\times10^5)\)次提问。每次提问有个范围\(l,r\),你需要计算出\(\gcd(a_{l},,a_{l+1},...,a_{r})\),并且统计数对\((l’,r’......
  • 【蓝桥杯_真题演练】第十届C/C++省赛B组_H-等差数列(C++_gcd_数论)
    ProblemProcess在输入的时候先去重,然后进行排序,至于他们的公差p则需要计算每两个相邻数值之间差值的最大公因数,最终的结果应该是Code#include<bits/stdc++.h>usingnamespacestd;#definelllonglongintn,a[100010],cnt;set<int>s;intgcd(inta,intb){ returnb==......
  • UVA12716 GCD等于XOR GCD XOR
    UVA12716GCD等于XORGCDXOR一道数学题。 首先,我们可以知道,a-b>=gcd(a,b)=c;其次,a-b<=axorb=c;综上,可得a-b=c,即a-b=axorb.由于范围不大,直接枚举。第一层枚举c(因为c较少),第二层枚举a,(b=a-c) 再判断c是否等于a^b即可。#include<bits/stdc++.h>usingnamespacestd;......
  • [数论]Divisor and Gcd
    DivisorandGcd1、算术基本定理:n的质因数分解唯一一些常见结论:1.素数无限2.\(\lim_{n\rightarrow+\infty}n\prod\dfrac{n}{\frac{n}{\ln{n}}}\)(Π(n)表示<=n素数的个数)————即n以下素数个数大约是\(\frac{n}{\ln(n)}\)级别的3.\(Pn=O(nlogn)\)级别的(Pn表示素数)......
  • [ABC162E] Sum of gcd of Tuples (Hard)
    题面翻译给定\(n,k\),求\[\sum^k_{a_1=1}\sum^k_{a_2=1}\sum^k_{a_3=1}\dots\sum^k_{a_n=1}gcd(a_1,a_2,a_3,\dots,a_n)\mod\1000000007\]制約$2\\leq\N\\leq\10^5$$1\\leq\K\\leq\10^5$。思路点拨我们看到这么多\(\gcd\)的式子,我们自然想到莫比乌斯反演......
  • [数论]GCD&LCM&欧拉函——推柿子+例题
    GCD&LCM&欧拉函——推柿子一、\(\sum_{i=1}^{n}[\gcd(i,n)=d]\)\(\sum_{i=1}^{n}[\gcd(i,n)=d]\)\(=\sum_{i=1}^{\frac{n}{d}}[\gcd(i,\frac{n}{d})=1]\)\(=\phi(\frac{n}{d})\)二、\(\sum_{i=1}^{n}\gcd(i,n)\)\(\sum_{i=1}^{n}\gcd(i,......
  • Educational Codeforces Round 20-C. Maximal GCD
    原题链接C.MaximalGCDtimelimitpertestmemorylimitpertestinputoutputn.Youshouldcreatesuch strictlyincreasing sequenceof k positivenumbers a1, a2, ..., ak,thattheirsumisequalto nGr......
  • gcd 证明
    gcd$gcd(a,b)$表示a与b的最大公约数。heregcd证明设有$gcd(a,b)=d(a>b)$,则$d|a$、$d|b$(也就是d既是a的因数也是b的因数)。设有$k=\lfloor\frac{a}{b}\rfloor$、$r=a\modb$,则$a=bk+r$。举个栗子,因为$a=5b+1=5\times2+1=11$,则\[\begin{c......