最大公约数(信息学奥赛一本通 1627)

本文介绍如何在信息学奥赛中解决求解两个大整数最大公约数的问题,采用高精度和二进制算法(更相减损术)的方法,详细解释了数据范围、压位高精度的概念,并提供了相关资源链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【题目描述】

给出两个正整数 A,B,求它们的最大公约数。

【输入】

输入共两行,第一行一个正整数 A,第二行一个正整数 B。

【输出】

在第一行输出一个整数,表示 A,B 的最大公约数。

【输入样例】

18
24

【输出样例】

6

【提示】

数据范围与提示:

对于 60% 的数据,1≤A,B≤1018

对于 100% 的数据,1≤A,B≤103000 。


 


 首先看到这道题的数据范围之后,我们肯定是得用高精度呐,然后为了方便一点,缩小数组大小,我们还可以引进“压位高精度”,一般来说,最好使用四位压一位,用五位的话容易爆掉...

--->关于“压位高精”,可以去看看这位大佬的博客,感jio讲的很清楚

进入正题,此题要求两个高精的“最大公约数”,那我们肯定会想到用“二进制算法”呐,

--->关于“二进制算法”,可以去看看我的另一篇博客(应该在最后面有讲到),也称“更相减损术”啦

那我直接上代码吧(反正是一道模板题...

  1 #include<bits/stdc++.h>
  2 using namespace std;
  3 const int N=1e6+5,inf=1<<29,base=10000;//10000而不是100000,不然容易爆掉! 
  4 int T;
  5 int a[1000],b[1000],c[1000],f[1000];
  6 int read()
  7 {
  8     int f=1;char ch;
  9     while((ch=getchar())<'0'||ch>'9')
 10         if(ch==
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值