当前位置: 首页 > news >正文

《P2152 [SDOI2009] SuperGCD》

题目描述

Sheng bill 有着惊人的心算能力,甚至能用大脑计算出两个巨大的数的最大公约数!因此他经常和别人比赛计算最大公约数。有一天 Sheng bill 很嚣张地找到了你,并要求和你比赛,但是输给 Sheng bill 岂不是很丢脸!所以你决定写一个程序来教训他。

输入格式

共两行,第一行一个整数 a,第二行一个整数 b。

输出格式

一行,表示 a 和 b 的最大公约数。

输入输出样例

输入 #1复制

12 54

输出 #1复制

6

说明/提示

数据规模与约定
  • 对于 20% 的数据,有 0<a,b≤1018。
  • 对于 100% 的数据,有 0<a,b≤1010000。

代码实现:

#include <bits/stdc++.h> using namespace std; const long long MOD = 10000000000000000ll; const int MAXN = 700; long long A[MAXN], B[MAXN]; char buf[MAXN << 4]; inline long long str2ll(char s[], int l, int r) { long long res = 0, pow10 = 1; for (int i = l; i <= r; i++) res += (s[i] ^ 48) * pow10, pow10 *= 10ll; return res; } inline void read_big(long long x[]) { scanf("%s", buf + 1); int len = x[0] = strlen(buf + 1); x[0] = (len + 15) >> 4; for (int i = 1; i <= (len >> 1); i++) swap(buf[i], buf[len - i + 1]); // 修复:将i的定义移到for循环外,扩大作用域 int i; for (i = 1; i + 15 <= len; i += 16) x[(i + 15) >> 4] = str2ll(buf, i, i + 15); if (i <= len) x[x[0]] = str2ll(buf, i, len); } inline void print_big(long long x[]) { printf("%lld", x[x[0]]); for (int i = x[0] - 1; i >= 1; i--) printf("%016lld", x[i]); } inline void cp(long long a[], long long b[]) { memcpy(b, a, MAXN << 3); } inline void clr(long long x[]) { memset(x, 0, MAXN << 3); } inline bool is_even(long long x[]) { return !(x[1] & 1); } inline void div2(long long x[]) { bool rem[MAXN] = {0}; if (!x[0]) return; for (int i = x[0]; i; i--) rem[i - 1] = x[i] & 1, x[i] >>= 1; for (int i = x[0]; i; i--) if (rem[i]) x[i] += MOD >> 1; while (x[0] && !x[x[0]]) --x[0]; } inline void mul2(long long x[]) { long long carry = 0; for (int i = 1; i <= x[0] + 1; i++) { x[i] = (x[i] << 1) + carry; carry = x[i] / MOD; x[i] %= MOD; } while (x[x[0] + 1]) ++x[0]; } inline int cmp(long long a[], long long b[]) { if (a[0] > b[0]) return 1; if (a[0] < b[0]) return -1; for (int i = a[0]; i; i--) { if (a[i] > b[i]) return 1; if (b[i] > a[i]) return -1; } return 0; } inline void sub(long long a[], long long b[], long long res[]) { clr(res); for (int i = 1; i <= a[0]; i++) { res[i] += a[i] - b[i]; if (res[i] < 0) res[i] += MOD, --res[i + 1]; } res[0] = a[0]; while (res[0] && !res[res[0]]) --res[0]; } long long tmp[MAXN], res[MAXN]; inline void big_gcd(long long a[], long long b[]) { clr(res); if (cmp(a, b) == -1) cp(a, tmp), cp(b, a), cp(tmp, b); bool a_even, b_even; int cnt2 = 0; while (b[0]) { a_even = is_even(a); b_even = is_even(b); if (a_even && b_even) { cnt2++; div2(a); div2(b); } else if (!a_even && b_even) { div2(b); } else if (a_even && !b_even) { div2(a); } else { sub(a, b, tmp); cp(tmp, a); } if (cmp(a, b) == -1) cp(a, tmp), cp(b, a), cp(tmp, b); } cp(a, res); while (cnt2--) mul2(res); } int main() { read_big(A); read_big(B); big_gcd(A, B); print_big(res); return 0; }
http://www.jsqmd.com/news/98572/

相关文章:

  • 2025年12月祛痘沐浴露推荐排行榜单:十强品牌深度评测对比与科学选购指南 - 十大品牌推荐
  • 性价比高的物联网网关开发哪个哪家强
  • Qwen3-14B-MLX-4bit的长文本处理与YaRN扩展
  • 2025年12月祛痘沐浴露推荐排行榜:十款热门产品深度评测与选购指南 - 十大品牌推荐
  • LangFlow工作流实时预览功能详解及其应用场景
  • Qwen3-VL-30B显存需求全解析:不同精度下的真实占用
  • 2025年12月祛痘沐浴露推荐:十款热门产品深度对比与效果评测榜 - 十大品牌推荐
  • 24、Linux文件系统:ext2、ext3与ReiserFS深度解析(上)
  • uniapp+springboot基于微信小程序的考研资源共享平台的设计与实现_b7qm8367_cc181
  • 2025年易久伺服压装系统权威推荐:精密装配领域技术口碑与市场表现解析 - 十大品牌推荐
  • C++日志系统支持网络输出
  • 雪深监测站:积雪厚度与降雪总量的信息采集
  • 20万以内城市代步新能源SUV排行榜:6款纯电动低养车成本车型深度解析
  • 好用的物联网网关开发机构
  • 爱玩机工具箱 S-22.1.0.1,强大的手机玩机刷机模块工具箱,免Root也能隐藏应用
  • 2025 年值得选择的 TVC 视频制作服务推荐
  • 如何用GPT-SoVITS实现高质量语音合成?开源方案全解析
  • Niagara Launcher V1.15.4 分享:独一无二的安卓第三方桌面,修复部分问题
  • 过碳酸钠厂家推荐:优质供应商、批发商及制造商大全 - 品牌2026
  • 汽车零部件检测的未来:全尺寸、全链条、全生命周期管理
  • 易语言数据库操作:结构化数据管理的核心
  • uniapp+springboot档案馆参观预约系统 微信小程序_x0af865x_论文
  • SGMICRO圣邦微 SGM2007-3.0XN5/TR SOT23-5 线性稳压器(LDO)
  • 实用指南:web功能测试流程 - web测试用例设计
  • 5分钟搞定F5-TTS语音合成:从零配置到实战应用完整指南
  • 鸿蒙应用签名与上架全流程:从开发完成到用户手中
  • 2025 年 12 月无尘室起重机厂家权威推荐榜:洁净空间物料搬运的精密高效解决方案精选 - 品牌企业推荐师(官方)
  • 16、PC-BSD系统软件安装与管理指南
  • Java-198 RabbitMQ JMS 模式详解:Queue/Topic、6 类消息与对象模型(JMS 2.0 / Jakarta Messaging 3.1)
  • Matlab 2025b 安装教程(保姆级)(附安装包等) - Three-Stones