news 2026/4/30 0:40:58

《P2152 [SDOI2009] SuperGCD》

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
《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; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 13:36:57

Java最新面试题库——精选100道(含精简答案),收藏这篇就够了

JavaEE面试题整理 一、Java基础篇二、JVM篇三、Tomcat篇四、MyBatis篇五、Spring篇六、SpringMVC面试题整理七、Redis篇八、Mongodb篇九、MQ篇十、Shiro篇十一、搜索引擎篇十二、Nginx篇十三、SpringBoot篇十四、Dubbo篇 一、Java基础篇 1、JAVA中的几种基本数据类型是什么&…

作者头像 李华
网站建设 2026/4/28 23:22:19

如何用GPT-SoVITS实现高质量语音合成?开源方案全解析

如何用 GPT-SoVITS 实现高质量语音合成&#xff1f;开源方案全解析 在数字人、虚拟主播和个性化语音助手日益普及的今天&#xff0c;人们不再满足于千篇一律的“机器音”。我们更希望听到一个熟悉的声音——可能是自己、亲人&#xff0c;或是某个角色的专属声线。这种对“声音个…

作者头像 李华
网站建设 2026/4/29 8:41:29

npm安装失败怎么办?GPT-SoVITS依赖冲突解决方案

npm安装失败怎么办&#xff1f;GPT-SoVITS依赖冲突解决方案 在尝试部署一个热门的语音克隆项目时&#xff0c;你是否曾被一连串的 npm ERR! 报错拦在门外&#xff1f;明明代码就在眼前&#xff0c;却因为前端构建失败而无法启动 WebUI 界面——这种“差一步就能用”的挫败感&a…

作者头像 李华
网站建设 2026/4/22 15:37:35

2025年高口碑AI创意视频服务商TOP3推荐

在2025年&#xff0c;随着AI技术的不断进步&#xff0c;创意视频服务商日益受到关注。本文将为您揭晓高口碑的AI创意视频服务商推荐&#xff0c;帮助您选择最符合需求的视频制作平台。这些服务商在用户口碑、功能丰富性和创新能力方面表现突出&#xff0c;绝对不容错过&#xf…

作者头像 李华