#include<iostream>
#include<cstdio>
#include<cstring>
#define inf 1000000000
using namespace std;
char ch1[],ch2[];
int la,lb,cnt;
struct data{int a[],l;}a,b;
bool com()
{
if(a.l<b.l)return ;
if(a.l>b.l)return ;
for(int i=a.l;i>;--i)
if(a.a[i]>b.a[i])return ;
else if(a.a[i]<b.a[i])return ;
return ;
}
void print(data a)
{
while(a.a[a.l]==)a.l--;
for(int i=a.l;i>;--i)
if(i==a.l)printf("%d",a.a[i]);
else printf("%09d",a.a[i]);
}
inline data sub(data a,data b)
{
int k;
data c;
for(int i=;i<=;++i)
{
if(i<=b.l)c.a[i]=a.a[i]-b.a[i];
else if(i<=a.l)c.a[i]=a.a[i];
else c.a[i]=;
if(c.a[i]<)
{
c.a[i]+=inf;
a.a[i+]--;
}
}
c.l=a.l;
while(c.a[c.l]==&&c.l)c.l--;
return c;
}
void diva()
{
for(int i=;i<=a.l;i++)
{
if(a.a[i]&)a.a[i-]+=inf/;
a.a[i]>>=;
}
if(!a.a[a.l])a.l--;
}
void divb()
{
for(int i=;i<=b.l;i++)
{
if(b.a[i]&)b.a[i-]+=inf/;
b.a[i]>>=;
}
if(!b.a[b.l])b.l--;
}
void mul()
{
for(int i=a.l;i>;i--)
{
a.a[i]<<=;
a.a[i+]+=a.a[i]/inf;
a.a[i]%=inf;
}
while(a.a[a.l]>)a.l++;
for(int i=b.l;i>;i--)
{
b.a[i]<<=;
b.a[i+]+=b.a[i]/inf;
b.a[i]%=inf;
}
while(b.a[b.l]>)b.l++;
}
int main()
{
scanf("%s%s",ch1+,ch2+);
la=strlen(ch1+);lb=strlen(ch2+);
if(la%)a.l=la/+;
else a.l=la/;
if(lb%)b.l=lb/+;
else b.l=lb/;
for(int i=;i<=a.l;++i)
{
int k1=max(,la-i*+),k2=la-(i-)*;
for(int j=k1;j<=k2;++j)
a.a[i]=a.a[i]*+ch1[j]-'';
}
for(int i=;i<=b.l;++i)
{
int k1=max(,lb-i*+),k2=lb-(i-)*;
for(int j=k1;j<=k2;++j)
b.a[i]=b.a[i]*+ch2[j]-'';
}
while()
{
if((a.a[]%==)&&(b.a[]%==)){diva();divb();cnt++;}
else if((a.a[]%==))diva();
else if((b.a[]%==))divb();
if(com()){a=sub(a,b);if(!a.l){while(cnt--)mul();print(b);break;}}
else {b=sub(b,a);if(!b.l){while(cnt--)mul();print(a);break;}}
}
return ;
}

高精度gcd的更多相关文章

  1. 浅谈Stein算法求最大公约数(GCD)的原理及简单应用

    一.Stein算法过程及其简单证明 1.一般步骤: s1:当两数均为偶数时将其同时除以2至至少一数为奇数为止,记录除掉的所有公因数2的乘积k: s2:如果仍有一数为偶数,连续除以2直至该数为奇数为止: ...

  2. 高精度&&FFT

    ACM-高精度模板(综合篇) 时间:-- :: 阅读: 评论: 收藏: [点我收藏+] 标签:高精度 在这里,我们约定,能用int表示的数据视为单精度,否则为高精度.所有函数的设计均采用带返回值的形式 ...

  3. SDOI2009

    1226: [SDOI2009]学校食堂Dining Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴 ...

  4. 【BZOJ】【1876】【SDOI2009】SuperGCD

    高精度+GCD 唔……高精gcd其实可以这么算: \[ GCD(a,b)= \begin{cases} a & b=0 \\ 2*GCD(\frac{a}{2},\frac{b}{2}) &a ...

  5. Bzoj1498&1416: [NOI2006]神奇的口袋

    什么鬼双倍经验题??? Sol 考虑在第\(k\)次摸到\(y\)的概率 如果上次摸到\(y\),目前有\(sum\)个球,\(y\)有\(a[y]\)个,那么概率就是\(\frac{a[y]+d}{ ...

  6. ACM数学

     1.burnside定理,polya计数法 这个专题我单独写了个小结,大家可以简单参考一下:polya 计数法,burnside定理小结 2.置换,置换的运算 置换的概念还是比较好理解的,< ...

  7. exam9.6&&7

    emmm 改题稍紧张,以后几篇并一起写 9.6 (前十并没有参加本次考试) 于是我就rank8了 一道题一道题来 先说T1: 显然是一个高精度GCD,于是打算用计算器算一下时间复杂度 众所周知gcd是 ...

  8. HZOI20190906模拟38 金,斯诺,赤

    题面:https://www.cnblogs.com/Juve/articles/11479415.html T1:高精度gcd,其实不用写高精度取模,gcd还有一种求法 int gcd(int a, ...

  9. JZOJPJ-C 8/21题解

    原题大战D1 吐槽: T1 \(O(N^2)\; N \leq 26\) N大时还要写高精, 可以增加难度 T2 不给范围 T3 居然没有完全卡掉 不对应该赞美出题人 T4 PJ考个四边形不等式?? ...

随机推荐

  1. arcgis api 4.x for js 结合 react 入门开发系列react全家桶实现加载天地图(附源码下载)

    基于两篇react+arcgis的文章介绍,相信大家也能体会两者的开发区别了.在“初探篇”中作者也讲述了自己的选择,故废话不多说,本篇带大家体验在@arcgis/webpack-plugin环境下,使 ...

  2. bay——安装_RAC11g_LC_ASM方式_测试环境.txt

    ★★★____★☆★〓〓〓〓→VMware vSphere Client6.0 https://10.20.4.200/ 下载Vwmare IP:10.20.4.200-------账号:root-- ...

  3. 基于tiny4412的Linux内核移植 --- aliases节点解析【转】

    转自:https://www.cnblogs.com/pengdonglin137/p/5252348.html 阅读目录(Content) 作者信息 平台简介 正文 回到顶部(go to top) ...

  4. Ubuntu12.04配置永久静态ip地址

    1 切换到 root 用户 先临时切换到root用户(因为我不想每打一个命令都要在前面加上sudo) $ sudo -i 然后,输入密码临时切换到root用户.如下图: 2 配置IP 打开 /etc/ ...

  5. SpringBoot与SpringMVC的区别是什么?

    感谢原文出处:https://www.cnblogs.com/javazhiyin/ Spring 框架就像一个家族,有众多衍生产品例如 boot.security.jpa等等.但他们的基础都是Spr ...

  6. 自定义MVC二

    1. 什么是MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写, 它是一种软件设计典范,用一种业务逻辑.数据. ...

  7. 12Java基础_数组定义格式/动态初始化/静态初始化

    /* Java数组 格式一: int[] array; 格式二: int array[]; 数组初始化: 为数组中的元素分配内存空间 动态初始化: int[] array=new int[数组长度] ...

  8. 浅谈C++ STL stack 容器

    浅谈C++ STL stack 容器 本篇随笔简单介绍一下\(C++STL\)中\(stack\)容器的使用方法和常见的使用技巧. stack容器的概念 \(stack\)在英文中是栈的意思.栈是一种 ...

  9. 第一次作业--Numpy练习

    1.创建一个边界值为1而内部都是0的数组,图例如下:[提示:]解此题可以先把所有值都设置为1,这是大正方形:其次,把边界除外小正方形全部设置为0.本题用到numpy的切片原理.多维数组同样遵循x[st ...

  10. Linux环境变量配置方法

    Linux上环境变量配置分为设置永久变量和临时变量两种.环境变量设置方法同时要考虑环境Shell类型,不同类型的SHELL设置临时变量方法和设置永久变量对应的配置文件不同.Linux环境变量本身配置过 ...