[SDOI2009][BZOJ 1876]SuperGCD
Description
Input
Output
一行,表示A和B的最大公约数。
题解:
高精度
代码:
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
}
#define ll long long
#define MN 1255
#define Base 100000000
#define Width 8
char readin[MN*];
struct HPint{
ll s[MN],len;
void init(){memset(s,,sizeof s);len=;}
HPint operator =(ll num){
init();
for(;num>;){len++;s[len]=num%Base;num/=Base;}
return *this;
}
HPint operator =(const char *str){
init();
ll numlen=strlen(str);len=(numlen+Width-)/Width;
for(int i=numlen-,t=,w;i>=;i--,w*=){
if((numlen-i-)%Width==){w=;t++;}
s[t]+=w*(str[i]-);
}
return *this;
}
bool operator <(const HPint &a)const{
if(a.len!=len) return len<a.len;
for(int i=a.len;i>=;i--)if(a.s[i]!=s[i])return s[i]<a.s[i];
return ;
}
bool operator ==(const HPint &a)const{
return !(a<*this)&&!(*this<a);
}
HPint operator -(const HPint &a)const{
HPint ans;ans.init();ans.len=len;
for(int i=;i<=len;i++){
ans.s[i]+=s[i]-a.s[i];
if(ans.s[i]<){ans.s[i]+=Base;ans.s[i+]--;}
}
for(;ans.s[ans.len]==&&ans.len>;ans.len--);
return ans;
}
void MUL2(){
for(int i=;i<=len;i++)s[i]*=;len+=;
for(int i=;i<=len;i++){
s[i+]+=s[i]/Base;
s[i]%=Base;
}
for(;s[len]==&&len>;len--);
}
void DIV2(){
len+=;
for(int i=len;i>=;i--){
if(s[i]&)s[i-]+=Base;
s[i]/=;
}
for(;s[len]==&&len>;len--);
}
bool check(){
if(len==)return ;
else return s[]%==;
}
void read(){memset(readin,,sizeof(readin));scanf("%s",readin);*this=readin;}
void print(){
if(len==)printf("");
else{printf("%lld",s[len]);for(int i=len-;i>=;i--)printf("%08lld",s[i]);}
}
};
HPint a,b,res;
int cnt;
HPint gcd(HPint x,HPint y){
while(!(x==y)){
if(x<y)swap(x,y);
if(x.check()&&y.check()) x.DIV2(),y.DIV2(),cnt++;
else if(x.check()&&!y.check()) x.DIV2();
else if(!x.check()&&y.check()) y.DIV2();
else if(!x.check()&&!y.check()) x=x-y;
}
return x;
}
int main(){
a.read();b.read();
res=gcd(a,b);
while(cnt--) res.MUL2();
res.print();
return ;
}
来自PaperCloud的博客,未经允许,请勿转载,TKS!
[SDOI2009][BZOJ 1876]SuperGCD的更多相关文章
- BZOJ 1876 SuperGCD
Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的GCD(最大公约数)!因此他经常和别人比赛计算GCD.有一天Sheng bill很嚣张地找到了你,并要求 ...
- BZOJ 1876: [SDOI2009]SuperGCD
1876: [SDOI2009]SuperGCD Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 3060 Solved: 1036[Submit][St ...
- bzoj 1876 [SDOI2009]SuperGCD(高精度+更相减损)
1876: [SDOI2009]SuperGCD Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 2384 Solved: 806[Submit][Sta ...
- BZOJ 1876: [SDOI2009]SuperGCD( 更相减损 + 高精度 )
更相减损,要用高精度.... --------------------------------------------------------------- #include<cstdio> ...
- BZOJ 1876 [SDOI2009] SuperGcd | PY好题
题面就是让你求两个超级大整数,求GCD 题解: 题目本意应该是出题人想考考高精度取膜 但是可以通过一种神奇的Stein算法来做 由J. Stein 1961年提出的Stein算法很好的解决了欧几里德算 ...
- 「BZOJ 1876」「SDOI 2009」SuperGCD「数论」
题意 求\(\gcd(a, b)\),其中\(a,b\leq10^{10000}\) 题解 使用\(\text{Stein}\)算法,其原理是不断筛除因子\(2\)然后使用更相减损法 如果不筛\(2\ ...
- bzoj 1876
传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=1876 二进制gcd 学到了(' ' ) 高精还得压位,最开始没写压位,然后调了1h ...
- bzoj 1876 高精
首先我们知道,对于两个数a,b,他们的gcd情况有如下形式的讨论 当a为奇数,b为偶数的时候gcd(a,b)=gcd(a div 2,b) 当b为奇数,a为偶数的时候gcd(a,b)=gcd(a,b ...
- [SDOI2009][BZOJ 1226]学校食堂
Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以 ...
随机推荐
- nlp-roadmap
nlp-roadmap https://github.com/graykode/nlp-roadmap nlp-roadmap is Natural Language Processing ROADM ...
- mysql 设置局域网内可访问
今天同事要连我电脑的数据库 我以为只要127.0.0.1 可以访问就是 运行通过ip访问的... 然而并不是..这里记录下方法 1.打开命令行 进入你电脑的 mysql的bin 目录下 mys ...
- Flume 初探
Apache 是一个高可用.高可靠的,分布式的海量日志采集.聚合.传输系统,基于流式架构,灵活简单. Flume 最主要的作用就是实时读取服务器本地磁盘的数据,将数据写入HDFS中. Flume组成架 ...
- 主流WEB服务器大对比(Apache,Nginx,Lighttpd)
一.软件介绍(apache lighttpd nginx) 1. lighttpd Lighttpd 是一个具有非常低的内存开销, cpu 占用率低,效能好,以及丰富的模块等特点. lightt ...
- System V共享内存
目录 1. 概述 2. System V共享内存API shmget shmat shmdt shmctl 3. 简单的程序 代码实现 common.h shmcreate.c shmrmid.c s ...
- python获取第前多少天的日期
1. 显示昨天(前一天)的日期 from datetime import date, timedelta yesterday_date = (date.today() + timedelta(days ...
- STM32+IAR 解决Error[Pe147]: declaration is incompatible with "__nounwind __interwork __softfp unsigned
在IAR中编译STM32工程,遇到 Error[Pe147]: declaration is incompatible with "__nounwind __interwork __soft ...
- 安装CDH 5.15.1详解
安装CDH 5.15.1详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装Cloudera Manager 和CDH 1>.登陆Cloudera Manager ...
- 宁波市第二届CTF部分WP之msc1,msc2
msc1签到 这题没啥好说的,修改一下图片宽高,flag到手 msc2 一开始用十六进制编辑器打开,分析文件,暂时无果,卡了一小时(线下没网) 后面,看着这部分文件头眼熟,猜测是GIF头, 于是,在硬 ...
- git 如何忽略已经加入到版本控制的文件
增加 .gitignore 文件,里面添加需要忽略的文件(file_not_wanted): 执行命令 git rm -r --cached . 注意,最后的点.不要省略. 最后重新将所有文件添加 ...