bzoj1876 SuperGCD】的更多相关文章

第一次感觉Python艹题的快感 1876: [SDOI2009]SuperGCD Time Limit: 4 Sec Memory Limit: 64 MB Submit: 2461 Solved: 831 [Submit][Status][Discuss] Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约 数)!因此他经常和别人比赛计算GCD.有一天Sheng bill很嚣张地找到了你,并要求和你比 赛,但是输给Sheng bi…
Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约 数)!因此他经常和别人比赛计算GCD.有一天Sheng bill很嚣张地找到了你,并要求和你比 赛,但是输给Sheng bill岂不是很丢脸!所以你决定写一个程序来教训他. Input 共两行: 第一行:一个数A. 第二行:一个数B.0<A,B≤1010000 Output 一行,表示A和B的最大公约数.  Stein算法+高精度压位 首先不断约去A,B的公因数2直至A或B为奇数,记…
[BZOJ1876][SDOI2009]SuperGCD(数论,高精度) 题面 BZOJ 洛谷 题解 那些说数论只会\(gcd\)的人呢?我现在连\(gcd\)都不会,谁来教教我啊? 显然\(gcd\)除了辗转相除之外还可以辗转相减,然而辗转相减对于这题而言显然还不够优秀. 我们这样子来做. 如果当前\(a,b\)都是\(2\)的倍数,那么我们就把\(2\)直接同时除掉,直接在\(gcd\)中乘上一个\(2\).否则如果只有一个数是\(2\)的倍数,显然可以直接把这个\(2\)给除掉. 这样子可…
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1876 一道简单的高精度+Stein算法(或者叫辗转相除法)求最大公约数板子题. md还要压位.. 代码: #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<ctime> #include<iostream> #incl…
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1876 分析: 以为辗转相减会TLE呢……但是好像没这个数据……就这么水过去了…… 辗转相减求a,b的gcd其实可以优化的: 1.若a为偶数,b为奇数:gcd(a,b)=gcd(a/2,b) 2.若a为奇数,b为偶数:gcd(a,b)=gcd(a,b/2) 3.若a,b都是偶数:gcd(a,b)=2*gcd(a/2,b/2) 3.若a,b都是奇数:gcd(a,b)=gcd(a-b,b)…
更相减损数. 上手就debug了3个小时,直接给我看哭了. 3个函数都写错了是什么感受? 乘2函数要从前往后乘,这样后面的数乘2进位以后不会干扰前面的数. 除2函数要从后往前除,这样前面的数借来的位不会除2次. 然后函数里面俩个类里面的变量名不要打混. 哭瞎 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; + ; ,,,,,,,}; ]; int cnt; struc…
http://www.lydsy.com/JudgeOnline/problem.php?id=1876 高精压位GCD 对于  GCD(a, b)  a>b 若 a 为奇数,b 为偶数,GCD(a, b) = GCD(a, b / 2) 若 a 为偶数,b 为奇数,GCD(a, b) = GCD(a / 2, b) 若 a 为偶数,b 为偶数,GCD(a, b) = 2*GCD(a / 2, b / 2) 若 a 为奇数,b 为奇数,GCD(a, b) = GCD(a - b, b) vect…
http://www.lydsy.com/JudgeOnline/problem.php?id=1876 Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约 数)!因此他经常和别人比 赛计算GCD.有一天Sheng bill很嚣张地找到了你,并要求和你比 赛,但是输给Sheng bill岂不是很丢脸!所以你 决定写一个程序来教训他. Input 共两行: 第一行:一个数A. 第二行:一个数B. 0 < A , B ≤ 10 ^ 100…
题目 Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约 数)!因此他经常和别人比 赛计算GCD.有一天Sheng bill很嚣张地找到了你,并要求和你比 赛,但是输给Sheng bill岂不是很丢脸!所以你 决定写一个程序来教训他. 输入格式 共两行: 第一行:一个数A. 第二行:一个数B. 0 < A , B ≤ 10 ^ 10000. 输出格式 一行,表示A和B的最大公约数. 输入样例 12 54 输出样例 6 题解 时隔大半年,我回来A这道题啦[当初…
1876: [SDOI2009]SuperGCD Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 3060  Solved: 1036[Submit][Status][Discuss] Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约 数)!因此他经常和别人比赛计算GCD.有一天Sheng bill很嚣张地找到了你,并要求和你比 赛,但是输给Sheng bill岂不是很丢脸!所以你决定写一…
1876: [SDOI2009]SuperGCD Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 2384  Solved: 806[Submit][Status][Discuss] Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约 数)!因此他经常和别人比赛计算GCD.有一天Sheng bill很嚣张地找到了你,并要求和你比 赛,但是输给Sheng bill岂不是很丢脸!所以你决定写一个…
更相减损,要用高精度.... --------------------------------------------------------------- #include<cstdio> #include<cstring> #include<cctype> #include<algorithm>   using namespace std;   const int maxn = 10009;   char S[maxn]; int Power[maxn]…
高精度+GCD 唔……高精gcd其实可以这么算: \[ GCD(a,b)= \begin{cases} a & b=0 \\ 2*GCD(\frac{a}{2},\frac{b}{2}) &  a\mod 2=0,b \mod 2=0 \\ GCD(\frac{a}{2},b) &  a\mod 2=0,b \mod 2=1 \\ GCD(a,\frac{b}{2}) &  a\mod 2=1,b \mod 2=0 \\ GCD(b,a-b) & else \end…
Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约数)!因此他经常和别人比赛计算GCD.有一天Sheng bill很嚣张地找到了你,并要求和你比赛,但是输给Sheng bill岂不是很丢脸!所以你决定写一个程序来教训他. Input 共两行: 第一行:一个数\(A\). 第二行:一个数\(B\). Output 一行,表示\(A\)和\(B\)的最大公约数. Sample Input 12 54 Sample Output 6 HIN…
题目链接 这题.高精度.恶心.难受. 那么高精度的gcd怎么做呢? 若a=b gcd(a,b)=a ①a偶b偶 gcd(a,b)=2*gcd(a/2,b/2) ②a偶b奇 gcd(a,b)=gcd(a/2,b) ③a奇b奇 gcd(a,b)=gcd(a-b,b) 嗯.这玩意就这样了. #include<cmath> #include<iostream> #include<cstdio> #include<algorithm> #include<cstr…
辗转相减求a,b的gcd其实可以优化的: 1.若a为偶数,b为奇数:gcd(a,b)=gcd(a/2,b) 2.若a为奇数,b为偶数:gcd(a,b)=gcd(a,b/2) 3.若a,b都是偶数:gcd(a,b)=2*gcd(a/2,b/2) 3.若a,b都是奇数:gcd(a,b)=gcd(a-b,b) (a>b) 然后就涉及到高精度乘单精度,高精度减高精度,高精度除单精度………
题目大意 求两个个高精度数的gcd 题目解析 在学习gcd的时候,书上就记载了"更相减损术"这一方法 基于这种方法,我们进行优化,使得我们能快速求出两个大数的gcd 对于 \(a,b\) 的 \(GCD(a, b)\) 有 [1]. 若 \(a\) 为奇数,\(b\) 为偶数,\(GCD(a, b) = GCD(a, b / 2)\) 表示 \(b\) 存在2这个因子而 \(a\) 不存在,则将 \(b\) 除以2,,不考虑因子2: [2]. 若 \(a\) 为偶数,\(b\) 为奇数…
题意 求\(\gcd(a, b)\),其中\(a,b\leq10^{10000}\) 题解 使用\(\text{Stein}\)算法,其原理是不断筛除因子\(2\)然后使用更相减损法 如果不筛\(2\)因子的话复杂度是线性的,比如\(a=1,b=10^{10000}\) 再证明下更相减损术,即\(\gcd(a,b)=gcd(a-b,b)\): 假设\(d=\gcd(a,b)\),则\(a=pd,b=qd\) 根据定义可知\(\gcd(p,q)=1\) 因此\(px+qy=1\)存在解\(x,y\…
Stein算法是一种计算两个数最大公约数的算法,是针对欧几里德算法在对大整数进行运算时,需要试商导致增加运算时间的缺陷而提出的改进算法. 算法思想: 由J. Stein 1961年提出的Stein算法很好的解决了欧几里德算法中的这个缺陷,Stein算法只有整数的移位和加减法,为了说明Stein算法的正确性,首先必须注意到以下结论: gcd(a,a)=a,也就是一个数和其自身的公约数仍是其自身. gcd(ka,kb)=k gcd(a,b),也就是最大公约数运算和倍乘运算可以交换.特殊地,当k=2时…
题面就是让你求两个超级大整数,求GCD 题解: 题目本意应该是出题人想考考高精度取膜 但是可以通过一种神奇的Stein算法来做 由J. Stein 1961年提出的Stein算法很好的解决了欧几里德算法中的这个缺陷,Stein算法只有整数的移位和加减法,为了说明Stein算法的正确性,首先必须注意到以下结论: gcd(a,a)=a,也就是一个数和其自身的公约数仍是其自身. gcd(ka,kb)=k gcd(a,b),也就是最大公约数运算和倍乘运算可以交换.特殊地,当k=2时,说明两个偶数的最大公…
点此看题面 大致题意: 给你两个长度\(\le10000\)的正整数,让你求它们的\(gcd\). Python​ 高精请绕道. 这题的正解应该是Python. 对于这种高精题,肯定是Python最方便了. 于是我就默默写了Python. 代码 n=(int)(input())#读入第一个整数 m=(int)(input())#读入第二个整数 while n!=m:#辗转相减法(不知道为什么辗转相除法RE了) if n>m:#如果n>m n-=m#将n减去m else:#否则 m-=n#将m减…
传送门 非常显du然liu的一道题 就是求GCD 因为数据范围... 所以要上压位高精+非递归的辗转相减 关于辗转相减: 如果 A是二的倍数,B是二的倍数   那么GCD(A,B)=2 * GCD(A,B) 如果只有A是二的倍数   那么GCD(A,B)=GCD(A/2,B) 如果只有B是二的倍数   那么GCD(A,B)=GCD(A,B/2) 十分显然的结论... 然后不停地让大的数减去小的数 最后当它们相等时就是GCD了(因为大的减小的一直减到不能减就相当于取模) int slove() {…
[题目链接] 点击打开链接 [算法] 1.关于求最大公约数的算法 若使用辗转相除法,那么显然会超时 不妨这样思考 : 要求gcd(a,b), 若a为偶数,b为偶数,则gcd(a,b) = 2 * gcd(a/2,b/2) 若a为偶数,b为奇数,则gcd(a,b) = gcd(a/2,b) 若a为奇数,b为偶数,则gcd(a,b) = gcd(a,b/2) 若a为奇数,b为奇数,则gcd(a,b) = gcd(b,a-b) 这个算法的时间复杂度是log级别的 2.高精度计算           由…
https://www.luogu.org/problemnew/show/P2152 一开始不知道Java可以有gcd,手写了个辗转相除法. 发现Number类在参数传递中传的并非是引用! 最主要要解决的是MLE的问题,经查询得知System.gc()方法可以手动回收内存. 但是它慢得离谱! 我们考虑使用一个cnt计数器来平衡空间和时间的花费.经过试验cnt每800回收一次内存最终可以使花费内存到达32MB. 接近原本内存消耗的1/3! 至于为什么是模800……模200的时候TLE了,瞎蒙一个…
要你求两个非常大的数字的GCD. 不要想复杂,用高精度整更相减损术即可. #include <cstdio> #include <cstring> #include <algorithm> using namespace std; struct BigInt { static const int BASE = 10000, CARRY = 4, MAX_N = 10000; int A[MAX_N], Len; void Clear() { memset(A, 0, s…
这道题直接写了我两个多小时-- 主要是写高精度的时候还存在着一些小毛病,调了很久 在输入这一块卡了很久. 然后注意这里用while的形式写,不然会炸 最后即使我已经是用的万进制了,但是交上去还是有两个点超时 然后就开始漫长的改进,一直过不了那两个点. 然后突然发现,貌似这道题没有涉及到乘法. 那不就可以直接开10的九次方为一位了(10的9次方是int的最大数量级) 我交上去之后就AC了,全部测试点交上去总和4.6秒 然后原来我一个数开的是2500这么大,因为题目给的10000位,之前用万进制除以…
题意简述 求两个整数a,b的最大公约数0 < a , b ≤ 10 ^ 10000. 题解思路 如果 a % 2 == 0 && b % 2 == 0 gcd(a,b) = gcd(a / 2, b / 2) * 2 如果 a % 2 == 0 && b % 2 != 0 gcd(a,b) = gcd(a / 2, b); 如果 a % 2 != 0 && b % 2 == 0 gcd(a,b) = gcd(a, b / 2); 如果 a % 2 !=…
Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约 数)!因此他经常和别人比 赛计算GCD.有一天Sheng bill很嚣张地找到了你,并要求和你比 赛,但是输给Sheng bill岂不是很丢脸!所以你 决定写一个程序来教训他. Input 共两行: 第一行:一个数A. 第二行:一个数B. 0 < A , B ≤ 10 ^ 10000. Output 一行,表示A和B的最大公约数. 题解: 高精度 代码: #include<bits…
特别说明: 为了避免以后搬家时的麻烦, 这里的文章继续沿用csdn的风格和分类好了~ Emmmm这个题是一道高精度的模板题啊~ 既然是高精度的裸题, 那我们这些懒人当然是选择:用python啦~ 懒癌晚期 你看这不就做完了么←_← a=input() b=input() while(b): c=b b=a%b a=c print a 当然这份代码并不能在luogu上AC 应该是数据出锅了. (当然也不能算是出锅, 只是不太符合题目中说的输入格式而已...刻意卡python (当然还是有一些pyt…
Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约 数)!因此他经常和别人比赛计算GCD.有一天Sheng bill很嚣张地找到了你,并要求和你比 赛,但是输给Sheng bill岂不是很丢脸!所以你决定写一个程序来教训他. Input 共两行: 第一行:一个数A. 第二行:一个数B. Output 一行,表示A和B的最大公约数. Sample 输入样例#1: 12 54 输出样例#1: 6 Hints 对于20%的数据,0 < A…