题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1876

  一道简单的高精度+Stein算法(或者叫辗转相除法)求最大公约数板子题。

  md还要压位。。

  代码:

#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#define ll long long
#define ull unsigned long long
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
#define lowbit(x) (x& -x)
#define mod 1000000007
#define inf 0x3f3f3f3f
#define eps 1e-18
#define maxn 100010
inline ll read(){ll tmp=; char c=getchar(),f=; for(;c<''||''<c;c=getchar())if(c=='-')f=-; for(;''<=c&&c<='';c=getchar())tmp=(tmp<<)+(tmp<<)+c-''; return tmp*f;}
inline ll power(ll a,ll b){ll ans=; for(;b;b>>=){if(b&)ans=ans*a%mod; a=a*a%mod;} return ans;}
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline void swap(int &a,int &b){int tmp=a; a=b; b=tmp;}
using namespace std;
const int base=;
struct Bignum{
int len;
int num[];
friend bool operator < (Bignum a,Bignum b){
if(a.len!=b.len)return a.len<b.len;
for(int i=a.len;i;i--)
if(a.num[i]!=b.num[i])return a.num[i]<b.num[i];
return ;
}
friend Bignum operator - (Bignum a,Bignum b){
Bignum c;
memset(&c,,sizeof(c));
for(int i=;i<=a.len;i++){
if(a.num[i]<b.num[i])a.num[i]+=base,--a.num[i+];
c.num[i]=a.num[i]-b.num[i];
}
c.len=a.len;
while(c.len>&&!c.num[c.len])--c.len;
return c;
}
friend Bignum operator * (Bignum a,int b){
Bignum c;
memset(&c,,sizeof(c)); ll tmp=;
for(int i=;i<=a.len;i++){
tmp+=a.num[i]*b;
c.num[i]=tmp%base; tmp/=base;
}
c.len=a.len;
for(;tmp;tmp/=base)c.num[++c.len]=tmp%base;
return c;
}
friend Bignum operator / (Bignum a,int b){
Bignum c;
memset(&c,,sizeof(c)); ll tmp=;
for(int i=a.len;i;i--){
tmp=tmp*base+a.num[i];
c.num[i]=tmp/b; tmp%=b;
}
c.len=a.len;
while(c.len>&&!c.num[c.len])--c.len;
return c;
}
void print(Bignum a){
printf("%d",a.num[a.len]);
for(int i=a.len-;i;i--)
printf("%09d",a.num[i]);
printf("\n");
}
}a,b;
char A[],B[];
int n,m;
Bignum gcd(Bignum a,Bignum b)
{
int cnt=;
while(){
if(a<b){
Bignum tmp; tmp=a; a=b; b=tmp;
}
if(b.len==&&b.num[]==)break;
if(a.num[]&){
if(b.num[]&){
Bignum tmp; tmp=b; b=a-b; a=tmp;
}
else b=b/;
}
else{
if(b.num[]&)a=a/;
else ++cnt,a=a/,b=b/;
}
}
Bignum ans=a;
for(int i=;i<=cnt;i+=)ans=ans*(<<);
for(int i=cnt%;i;i--)ans=ans*;
return ans;
}
int main()
{
scanf("%s",A); n=strlen(A);
scanf("%s",B); m=strlen(B);
a.len=b.len=;
for(int i=n-;i>=;i-=){
a.num[++a.len]=;
for(int j=max(i-,);j<=i;j++)
a.num[a.len]=a.num[a.len]*+A[j]-'';
}
for(int i=m-;i>=;i-=){
b.num[++b.len]=;
for(int j=max(i-,);j<=i;j++)
b.num[b.len]=b.num[b.len]*+B[j]-'';
}
Bignum ans=gcd(a,b);
ans.print(ans);
}

bzoj1876

【bzoj1876】[SDOI2009]SuperGCD(高精度)的更多相关文章

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

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

  2. bzoj1876: [SDOI2009]SuperGCD

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

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

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

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

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

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

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

  6. bzoj 1876 [SDOI2009]SuperGCD(高精度+更相减损)

    1876: [SDOI2009]SuperGCD Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 2384  Solved: 806[Submit][Sta ...

  7. BZOJ 1876: [SDOI2009]SuperGCD( 更相减损 + 高精度 )

    更相减损,要用高精度.... --------------------------------------------------------------- #include<cstdio> ...

  8. BZOJ 1876: [SDOI2009]SuperGCD

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

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

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

随机推荐

  1. POJ 1861 &amp; ZOJ 1542 Network(最小生成树之Krusal)

    题目链接: PKU:http://poj.org/problem?id=1861 ZJU:http://acm.zju.edu.cn/onlinejudge/showProblem.do?proble ...

  2. Android无线测试之—UiAutmator运行命令介绍与快速调试

    一.运行命令介绍: #Test.java package com.uiautomatortest; import android.os.Bundle; import android.os.Remote ...

  3. VS2008试用版到期解决办法----win7下VS2008升级补丁.zip

    打开好久没用的Visual studio 2008,才知道试用版已经到期了.在网上找来了序列号,可是连一个输入序列号的地方都没有,困惑了好久,终于找到了解决办法. 首先献上自己收集的Visual st ...

  4. 1307 绳子与重物(DFS)

    1307 绳子与重物 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有N条绳子编号 0 至 N - 1,每条绳子后面栓了一个重物重量 ...

  5. linux解压war包

    可以用unzip命令 unzip project.war -d project 这样就在当前目录下解压project.war到project目录里面,参数-d的意思是创建project目录 附:unz ...

  6. zookeeper 命令行使用

    先用简易的客户端链接上 默认链接的就是本机上面的zkserver 我一上来help 下.没办法 ,用的少,先喊一声救命 ,看看有没有人救我! [zk: localhost:2181(CONNECTED ...

  7. 学习 NGINX

    At a high level, configuring NGINX Plus as a web server is a matter of defining which URLs it handle ...

  8. 【24】response对象以及Python3中的一些变化

    request.COOKIES    用来获取cookie response.write()      写的方法是response对象的 转自:博客园python3的变化 print 由一个语句(st ...

  9. MySQL 第四天

    回顾 列属性: 主键, 自增长, 唯一键     关系: 一对一,一对多和多对多 范式: 三层范式 1NF: 字段设计必须符合原子性 2NF: 不存在部分依赖(没有复合主键) 3NF: 不存在传递依赖 ...

  10. Python Interpreter

    在开始之前,我们先限定下python解释器的意思.当讨论Python的时候,解释器这个词可以用在不同的地方.有的时候,解释器指的是Python Interpreter,也就是你在命令行交互界面上输入p ...