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为奇数,记录约去2的次数k。

循环执行:{

 若A或B为偶数则不断约去2

 若A<B则交换A,B

 A-=B

 若A=0则输出B*2k,算法结束

}

#include<cstdio>
#include<cstring>
#define B 1000000000
const int B9=B-;
char s[];
struct num{
int a[];
int l;
num(){l=;}
inline void div2(){
for(int i=l;i>;i--){
if(a[i]&)a[i-]+=B;
a[i]>>=;
}
a[]>>=;
while(l&&!a[l])--l;
}
inline void mut2(){
for(int i=;i<=l;i++)a[i]<<=;
for(int i=;i<=l;i++)a[i+]+=a[i]/B,a[i]%=B;
if(a[l+])l++;
}
void print(){
printf("%d",a[l]);
for(int i=l-;i>=;i--)printf("%09d",a[i]);
}
}a1,b1;
inline bool operator<(num&a,num&b){
for(int i=a.l<b.l?b.l:a.l;i>=;i--){
if(a.a[i]<b.a[i])return true;
if(a.a[i]>b.a[i])return false;
}
return false;
}
inline bool operator-=(num&a,num&b){
a.a[]+=;
for(int i=a.l;i>=;i--)a.a[i]+=B9-b.a[i];
for(int i=;i<a.l;i++)a.a[i+]+=a.a[i]/B,a.a[i]%=B;
a.a[a.l]%=B;
while(a.l&&!a.a[a.l])--a.l;
}
num*a=&a1,*b=&b1,*c;
int t2=,l;
int p10[]={,,,,,,,,};
int main(){
scanf("%s",s);
l=strlen(s)-;
for(int i=;i<=l;i++)a->a[(l-i)/]+=p10[(l-i)%]*(s[i]-'');
a->l=l/;
if(a->a[a->l+])a->l++;
scanf("%s",s);
l=strlen(s)-;
for(int i=;i<=l;i++)b->a[(l-i)/]+=p10[(l-i)%]*(s[i]-'');
b->l=l/;
if(b->a[b->l+])b->l++;
while(!(a->a[]&)&&!(b->a[]&)){
t2++;
a->div2();
b->div2();
}
do{
while(!(a->a[]&))a->div2();
while(!(b->a[]&))b->div2();
if(*a<*b)c=a,a=b,b=c;
*a-=*b;
}while(a->l!=||a->a[]!=);
while(t2--)b->mut2();
b->print();
return ;
}

bzoj1876 SuperGCD的更多相关文章

  1. BZOJ-1876 SuperGCD Python(欧几里德算法)

    第一次感觉Python艹题的快感 1876: [SDOI2009]SuperGCD Time Limit: 4 Sec Memory Limit: 64 MB Submit: 2461 Solved: ...

  2. 【BZOJ1876】[SDOI2009]SuperGCD(数论,高精度)

    [BZOJ1876][SDOI2009]SuperGCD(数论,高精度) 题面 BZOJ 洛谷 题解 那些说数论只会\(gcd\)的人呢?我现在连\(gcd\)都不会,谁来教教我啊? 显然\(gcd\ ...

  3. 【bzoj1876】[SDOI2009]SuperGCD(高精度)

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1876 一道简单的高精度+Stein算法(或者叫辗转相除法)求最大公约数板子题. md还 ...

  4. [BZOJ1876][SDOI2009]superGCD(高精度)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1876 分析: 以为辗转相减会TLE呢……但是好像没这个数据……就这么水过去了…… 辗转 ...

  5. bzoj1876: [SDOI2009]SuperGCD

    更相减损数. 上手就debug了3个小时,直接给我看哭了. 3个函数都写错了是什么感受? 乘2函数要从前往后乘,这样后面的数乘2进位以后不会干扰前面的数. 除2函数要从后往前除,这样前面的数借来的位不 ...

  6. bzoj千题计划288:bzoj1876: [SDOI2009]SuperGCD

    http://www.lydsy.com/JudgeOnline/problem.php?id=1876 高精压位GCD 对于  GCD(a, b)  a>b 若 a 为奇数,b 为偶数,GCD ...

  7. BZOJ1876:[SDOI2009]SuperGCD——C++高精度良心题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1876 Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数 ...

  8. BZOJ1876 [SDOI2009]SuperGCD 【高精 + GCD优化】

    题目 Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约 数)!因此他经常和别人比 赛计算GCD.有一天Sheng bill很嚣张地找到了你,并要求和你比 赛,但 ...

  9. BZOJ 1876: [SDOI2009]SuperGCD

    1876: [SDOI2009]SuperGCD Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 3060  Solved: 1036[Submit][St ...

随机推荐

  1. 玩转X-CTR100 | X-PrintfScope波形显示

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      X-CTR100控制器配套的X-Print ...

  2. Sysinternals Suite 2014.08.18

    Windows Sysinternals Suite 是一套由微软官方免费提供的系统工具集,其中包含了大量超级实的优秀绿色小软件,譬如 Desktops (虚拟桌面).Process Explorer ...

  3. 安装 Java 6

    从服务器下载 Linux 64位 jdk 到本地.下载地址:\\192.167.100.225\share\Tool\JAVA\jdk-6u34-linux-x64.bin 给安装文件添加执行权限 $ ...

  4. UI基础:UITextField 分类: iOS学习-UI 2015-07-01 21:07 68人阅读 评论(0) 收藏

    UITextField 继承自UIControl,他是在UILabel基础上,对了文本的编辑.可以允许用户输入和编辑文本 UITextField的使用步骤 1.创建控件 UITextField *te ...

  5. cocos2dx 3.1.1移植安卓apk (lua项目交叉编译 mac环境下)

    cocos2dx 3.1.1 lua项目安卓交叉编译 mac环境下 本文基于ant,sdk,ndk,adt等软件和环境已经事前设置好 1\新建项目 在mac的终端下输入命令: cocos new te ...

  6. A+B for Input-Output Practice (VII)

    A+B for Input-Output Practice (VII) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...

  7. adb安装启动Touch校正软件

    /********************************************************************************* * adb安装启动Touch校正软 ...

  8. HDOJ 1061 Rightmost Digit

    找出数学规律 原题: Rightmost Digit Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Ja ...

  9. 【codeforces div3】【E. Cyclic Components】

    E. Cyclic Components time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  10. cf 295 div 2 B (bfs)

    题意:给出 n.m 两数,可以对 n 进行两种操作 减一或者乘二,操作过程中 n 必须保证非负,问使 n 变为 m 至少需要几步操作. 这是我练水题的时候做到的,题目不难,只是我 bfs 一直没怎么用 ...