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. C语言 string::size_type类型

    string::size_type类型 从逻辑上来讲,size()成员函数似乎应该返回整型数值,或如2.2节“建议”中所述的无符号整数.但事实上,size操作返回的是string::size_type ...

  2. node 常见的一些系统问题

    nodde正风生火起,很多介绍却停留在入门阶段,无法投入生产 许多文章在讲第三方类库,可是这些库质量差距较大,一旦遇到问题怎么办 全面了解node核心才能成为一名合格的node开发人员 1. node ...

  3. makefile的一个错误:*** missing separator

    原文转自:http://blog.sina.com.cn/s/blog_87c063060101c9yp.html 1.在写 多目录下makefile的时候,碰到一个错误提示,让我纠结许久,后面还是解 ...

  4. 第三课 操作系统开发之x86模拟环境搭建

    前面我们讲解了主引导程序的加载过程,并且制作了虚拟软盘a.img,最终这个主引导程序也在机器中成功运行了,但是实际开发的时候,并不会如此简单,免不了调试过程,如果还像上一节中直接将软盘放到机器中去加载 ...

  5. VC++ 6.0 C8051F340 USB PC侧通信 Demo

    // HelloWorld.cpp : Defines the entry point for the console application. // /*********************** ...

  6. chapter02 朴素贝叶斯分类器对新闻文本数据进行类型预测

    基本数学假设:各个维度上的特征被分类的条件概率之间是相互独立的.所以在特征关联性较强的分类任务上的性能表现不佳. #coding=utf8 # 从sklearn.datasets里导入新闻数据抓取器f ...

  7. git中的标签

     /*游戏或者运动才能让我短暂的忘记心痛,现如今感觉学习比游戏和运动还重要——曾少锋*/ 1.创建标签: 对于标签来说大家都很熟悉,简单说就是将一个很长的门牌号用另外一个名字来取代,并且好记. 其实利 ...

  8. ZOJ2401 Zipper 双塔式 DP(双塔DP)

    第二次遇到双塔DP,再写一下. (flag是为了避免memset多次导致的时间浪费) #include<cstdio> #include<cstdlib> #include&l ...

  9. springboot项目文件上传(绝对路径)并使用tomcat虚拟路径进行图片预览

    前言 项目中,需要上传文件,但是可能会比较多,所以不能放入项目目录中,需要指定目录并按顺序放置.并且:还需要这些数据可以预览(图片等). 那么问题就是:上传完成之后我存入服务器,并拿到绝对路径,存入数 ...

  10. 各大OJ题目分类

    http://www.pythontip.com/acm/problemCategory