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)

vector 压8位 是 压4位 用时的一半

vector 写 高精 真心 方便

#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#include<iostream> using namespace std; #define N 100000000 typedef vector<int> bignum; inline bignum read()
{
bignum a;
string s,ss;
cin>>s;
reverse(s.begin(),s.end());
while(s.size()>)
{
ss=s.substr(,);
a.push_back(ss[]+ss[]*+ss[]*+ss[]*+ss[]*+ss[]*+ss[]*+ss[]*-*);
s=s.substr(,s.size());
}
int b=;
reverse(s.begin(),s.end());
for(int i=;i<s.size();++i) b=b*+s[i]-;
a.push_back(b);
return a;
} inline bool bigger(bignum a,bignum b)
{
if(a.size()>b.size()) return true;
if(a.size()<b.size()) return false;
for(int i=a.size()-;i>=;--i)
{
if(a[i]>b[i]) return true;
if(a[i]<b[i]) return false;
}
return false;
} inline bool iseven(bignum a)
{
return !(*a.begin()&);
} inline bool iszero(bignum a)
{
return a.size()== && !(*a.begin());
} inline void delzero(bignum &a)
{
while(a.size()>)
{
bignum::iterator it=--a.end();
if(*it) break;
a.erase(it);
}
} inline void sub(bignum &a,bignum b)
{
int i;
for(i=;i<b.size();++i)
{
if(a[i]<b[i]) a[i+]--,a[i]+=N;
a[i]-=b[i];
}
while(i<a.size() && a[i]<)
{
a[i]+=N;
++i;
--a[i];
}
delzero(a);
} inline void half(bignum &a)
{
for(int i=a.size()-;i>=;--i)
{
if(a[i]&) a[i-]+=N;
a[i]=a[i]>>;
}
delzero(a);
} inline void doubled(bignum &a)
{
for(int i=;i<a.size();++i)
{
a[i]<<=;
if(i> && a[i-]>=N) a[i-]-=N,a[i]++;
}
bignum::iterator it=--a.end();
if(*it>=N) *it-=N,a.push_back();
} inline void output(bignum a)
{
int i=a.size()-;
printf("%d",a[i]);
if(!i) return;
for(--i;i>=;--i) printf("%08d",a[i]);
} int main()
{
bignum a=read(),b=read();
int c=;
while()
{
if(bigger(b,a)) swap(a,b);
if(iszero(b)) break;
if(iseven(a) && iseven(b))
{
half(a); half(b);
c++;
}
else if(iseven(a)) half(a);
else if(iseven(b)) half(b);
else sub(a,b); }
while(c--) doubled(a);
output(a);
return ;
}

bzoj千题计划288:bzoj1876: [SDOI2009]SuperGCD的更多相关文章

  1. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块

    http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...

  2. bzoj千题计划207:bzoj1879: [Sdoi2009]Bill的挑战

    http://www.lydsy.com/JudgeOnline/problem.php?id=1879 f[i][j] 表示匹配了i个字符,匹配字符串的状态为j的方案数 枚举下一个字符是什么 计算加 ...

  3. bzoj千题计划181:bzoj1878: [SDOI2009]HH的项链

    http://www.lydsy.com/JudgeOnline/problem.php?id=1878 之前用莫队做的,现在用树状数组 把每种数的第一个出现位置在树状数组中+1 nxt[i] 记录i ...

  4. bzoj千题计划287:bzoj1228: [SDOI2009]E&D

    http://www.lydsy.com/JudgeOnline/problem.php?id=1228 打SG函数表,找规律: 若n是奇数m是奇数,则SG(n,m)=0 若n是偶数m是偶数,则SG( ...

  5. bzoj千题计划286:bzoj1226: [SDOI2009]学校食堂Dining

    http://www.lydsy.com/JudgeOnline/problem.php?id=1226 关键点:一个人只能忍受 ‘紧跟’ 在他 后面的b个人比他先打到饭 dp[i][j][k] 前i ...

  6. bzoj千题计划196:bzoj4826: [Hnoi2017]影魔

    http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...

  7. bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪

    http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...

  8. bzoj千题计划177:bzoj1858: [Scoi2010]序列操作

    http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...

  9. bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)

    https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...

随机推荐

  1. spring boot redis分布式锁

    随着现在分布式架构越来越盛行,在很多场景下需要使用到分布式锁.分布式锁的实现有很多种,比如基于数据库. zookeeper 等,本文主要介绍使用 Redis 做分布式锁的方式,并封装成spring b ...

  2. ssm整合快速入门程序(二)

    下面我们配置serivce层到项目中 1.service包中创建ItemsService.java接口,和service.imp包中创建一个service实现类ItemsServiceImpl.jav ...

  3. 【BZOJ1877】晨跑(费用流)

    [BZOJ1877]晨跑(费用流) 题面 Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他 坚持下来的只有晨跑. 现在 ...

  4. jdbc连接数据库并打印的简单例子

    6步连接数据库: import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; impor ...

  5. js中url跳转问题

    问题描述:列表中有不同的企业名字,每个企业名字都有一个不同的链接,用id做为参数区分.点击不同的名字,根据id的不同跳转到对应的详情页,设置连接如下: 1. url = http://localhos ...

  6. Oracle闪回恢复

    Oracle的闪回功能包括 1.闪回数据库(前提 归档模式下 启用闪回数据库) mount 下 alter database archivelog; alter database flashback ...

  7. sqlserver中压缩日志文件

    最近在转移数据,sqlserver的日志文件ldf,占用空间特别大,为了还原库,节省空间,所以压缩日志文件迫在眉睫.在网上找了一段代码: USE [master] GO ALTER DATABASE ...

  8. Android学习之AutoCompleteTextView和MultiAutoCompleteTextView

    转自:http://blog.csdn.net/qq_28468727/article/details/52258409 AutoCompleteTextView.MultiAutoCompleteT ...

  9. Django---视图

    全过程:用户填写相关数据,提交相关请求,链接到对应的视图上,在此视图上(有用户传过来的数据[就是视图要处理的数据],在视图里面对数据进行业务处理,在数据库中crub数据,然后把对应的界面和界面显示需要 ...

  10. handsontable自定义渲染

    本文主要介绍在使用Handsontable过程中,对加载的数据进行字体颜色.样式(style).数据格式化,对齐方式的处理,并添加自定义图片和单机事件功能. 代码如下: <!DOCTYPE ht ...