题目链接

这题。高精度。恶心。难受。

那么高精度的gcd怎么做呢?

若a=b gcd(a,b)=a

①a偶b偶 gcd(a,b)=2*gcd(a/2,b/2)

②a偶b奇 gcd(a,b)=gcd(a/2,b)

③a奇b奇 gcd(a,b)=gcd(a-b,b)

嗯。这玩意就这样了。

#include<cmath>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
int a[],b[],c[],f[],s0,T,kpl[],kyl;
char s[];
void bigscanf(int *a){
scanf("%s",s);
int len=strlen(s),i,j;
for(i=;i<len;++i){
j=(len-i+)/;
a[j]=a[j]*+s[i]-'';
}
a[]=(len+)/;
}
void bigprintf(int *a){
cout<<a[a[]];
for(int i=a[]-;i>;--i){
for(int j=;j>;j/=)cout<<a[i]/j%;
}
cout<<endl;
}
int bigcmp(int *a,int *b){
if(a[]>b[])return ;
if(a[]<b[])return -;
for(int i=a[];i>;i--){
if(a[i]>b[i])return ;
if(a[i]<b[i])return -;
}
return ;
}
void bigsub(int *a,int *b){
int k=a[],g=;
for(int i=;i<=k;i++){
a[i]=a[i]-b[i];
if(a[i]<){
a[i+]--;
a[i]=a[i]+;
}
else g=;
}
while(k>&&a[k]==)k--;
a[]=k;
}
void bigmul2(int *a,int *b,int *c){
int k=a[]+b[];
for(int i=;i<=a[];i++){
for(int j=;j<=b[];j++){
c[i+j-]=c[i+j-]+a[i]*b[j];
c[i+j]=c[i+j]+c[i+j-]/;
c[i+j-]=c[i+j-]%;
}
}
while(k>&&c[k]==)k--;
c[]=k;
}
void bigmul1(int *a,int b){
int k=a[],g=;
for(int i=;i<=a[];i++){
a[i]=a[i]*b+g;
g=a[i]/;
a[i]=a[i]%;
}
while(g>){
k++;
a[k]=g%;
g=g/;
}
while(k>&&a[k]==)k--;
a[]=k;
}
void bigdiv1(int *a,int b){
int k=a[],d=;
for(int i=a[];i>=;i--){
d=d*+a[i];
a[i]=d/b;
d=d%b;
}
while(k>&&a[k]==)k--;
a[]=k;
}
void copy(int *a,int *b){
for(int i=;i<=b[];++i){
a[i]=b[i];
}
}
void Gcd(int *a,int *b,int t){
int u=bigcmp(a,b);//cout<<u<<endl;
if(u==){T=t;return;}
if(u<){Gcd(b,a,t);return;}
int ta=,tb=;
if(a[]%==){
bigdiv1(a,);
ta=;
}
if(b[]%==){
bigdiv1(b,);
tb=;
}
if(ta&&tb)Gcd(a,b,t+);
else if(! ta&&! tb){bigsub(a,b);Gcd(a,b,t);}
else Gcd(a,b,t);
}
int main(){
bigscanf(a);
bigscanf(b);
Gcd(a,b,);
if(T==)bigprintf(a);
else {
f[]=f[]=;
for(int i=;i<=T;i++)bigmul1(f,);
bigmul2(f,a,kpl);
copy(f,kpl);
bigprintf(f);
}
return ;
}

[SDOI2009]SuperGCD的更多相关文章

  1. BZOJ 1876: [SDOI2009]SuperGCD

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

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

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

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

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

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

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

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

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

  6. bzoj1876: [SDOI2009]SuperGCD

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

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

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

  8. P2152 [SDOI2009]SuperGCD 未完成

    辗转相减求a,b的gcd其实可以优化的: 1.若a为偶数,b为奇数:gcd(a,b)=gcd(a/2,b) 2.若a为奇数,b为偶数:gcd(a,b)=gcd(a,b/2) 3.若a,b都是偶数:gc ...

  9. [BZOJ1877][SDOI2009]SuperGCD

    题目大意 求两个个高精度数的gcd 题目解析 在学习gcd的时候,书上就记载了"更相减损术"这一方法 基于这种方法,我们进行优化,使得我们能快速求出两个大数的gcd 对于 \(a, ...

随机推荐

  1. mysql 分库分表 ~ ShardingSphere生态圈

    一  简介   Apache ShardingSphere是一款开源的分布式数据库中间件组成的生态圈二 成员包含   Sharding-JDBC是一款轻量级的Java框架,在JDBC层提供上述核心功能 ...

  2. 微信app支付的坑

    app支付商户申请,需注册并认证开放平台账号后电脑端登录开放平台官网:open.weixin.qq.com,[管理中心]->[移动应用],选择需要申请支付的应用,点击[查看]->[微信支付 ...

  3. 20175204 张湲祯 2018-2019-2《Java程序设计》第三周学习总结

    20175204 张湲祯 2018-2019-2<Java程序设计>第三周学习总结 教材学习内容总结 -第四章类与对象要点: -面向对象语言三个特性:封装性:继承:多态: -类:1.类是组 ...

  4. 转:对UI自动化测试的一些感悟

    不断发掘自动化测试对各个团队的附加价值,这样才能得到来自四面八方的支持,没有将自动化加入项目过程的自动化都达不到预期的效果. UI自动化框架 把UI自动化框架设计成一个拼图性质的架构.把每个特性都设计 ...

  5. 51nod--1134 最长递增子序列 (动态规划)

    题目: 给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元素是递增的) 例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10. Input 第1行: ...

  6. pycharm导入自己写的模块时,模块下方出现红色波浪线的解决方案

    文章链接:https://blog.csdn.net/weixin_38383877/article/details/81121851 这种情况其实可以不用管,是可以正常运行的: 但是,如果看着不舒服 ...

  7. Js的那些事

    先说说  var array = new Array(10); 和 var array = Array.apply(null, {length:10});这两个有啥区别,乍一看两个都是生成长度是10的 ...

  8. 末学者笔记--Linux中RAID磁盘阵列及centos7启动过程

    <一>RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意. 磁盘阵列是由很多价格较便 ...

  9. django第三天

    从后台传入一层的字典数据 后台代码 前台代码一 浏览器结果 前台代码二 前台代码三 前台代码四 注意 默认遍历为KEY .values    .keys   .items 都不加括号

  10. CF121E Lucky Array

    题解: 这个题好像暴力+线段树就能过 就是对修改操作暴力,线段树维护查询 为啥呢 因为保证了数$<=1e4$,于是这样复杂度$n*1e4=1e9$ 那么特殊数只有30个 又因为操作是只加不减的, ...