题目链接

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

那么高精度的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. luogu 4345 Lucas的变形应用

    求 sigma i由0-k C(n,i) 利用Lucas定理+整除分块将C(n/p,i/p)利用i/p分块,得到k/p-1个整块(p-1)和一个小块(k%p) 最后得到式子 F(n,k)=F(n/p, ...

  2. -bash: Chmod: command not found

    是增加该文件的所有者拥有运行权限 如果所有者是root ,还要加sudo chmod u+x drlinuxclient.bin (sudo) chmod u+x drlinuxclient.bin ...

  3. 单模式串匹配----浅谈kmp算法

    模式串匹配,顾名思义,就是看一个串是否在另一个串中出现,出现了几次,在哪个位置出现: p.s.  模式串是前者,并且,我们称后一个 (也就是被匹配的串)为文本串: 在这篇博客的代码里,s1均为文本串, ...

  4. Fiddler模拟自动响应数据

    Fiddler模拟自动响应数据 定位到要修改的部分 2.将返回的数据保存到本地,保存成网页,并修改响应数据 找到修改的部分,修改之 3.再次请求刷新首页,将工具定位到autoresponder将接口加 ...

  5. python 打印Linux中文编码字符

    2018-10-12 12:02:15 星期五 python -c "print '\346\234\215\345\212\241\345\231\250\346\217\220\344\ ...

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

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

  7. Active information gathering-services enumeration

    1.Summaize the book  Practical  Web Penetration Testing first  nmap tools is important for gather in ...

  8. RGB与HSB之间转换

    先来了解一些概念: 1.RGB是一种加色模型,就是将不同比例的Red/Green/Blue混合在一起得到新颜色.通常RGB颜色模型表示为: 2.HSB(HSV) 通过色相/饱和度/亮度三要素来表达颜色 ...

  9. 论文阅读笔记四十二:Going deeper with convolutions (Inception V1 CVPR2014 )

    论文原址:https://arxiv.org/pdf/1409.4842.pdf 代码连接:https://github.com/titu1994/Inception-v4(包含v1,v2,v4)   ...

  10. Python面向对象之-反射

    Python中一切皆对象,在Python中的反射:通过字符串的形式操作对象的属性 hasattr  判断是否有改属性或者方法,有返回True,没有返回false getattr  如果是属性获得该属性 ...