首页 > 小红的 gcd
头像 取舍_fan
发表于 2024-07-14 21:58:26
D题 首先有以下性质 1. (a+b)%mod 等价于 a%mod + b%mod 2. a*b%mod 等价于 a%mod*b%mod (仅当a*b没有溢出时) 该题求解gcd(a,b)  a是大数 根据辗转相除法 gcd(a,b)=gcd(b, 展开全文
头像 Lambda_L
发表于 2025-12-02 00:51:31
思路先看一眼题,gcd,再看一眼数据,a 的十进制位数最大可以达到1e6!这意味着a可能非常大! !超过了long long类型所能表示的范围。由于a过大,我们不能直接使用标准的欧几里得算法,因为a无法作为一个long long或者int类型传入计算。核心处理当 a是一个大数时, 欧几里得算法的操作 展开全文
头像 自由的风0450
发表于 2025-12-02 07:43:07
先对大整数取模,再进行辗转相除法 #include <iostream> #include<string> using namespace std; long long mod(const string&s,long long b){ long long r 展开全文
头像 olone
发表于 2025-12-02 11:09:56
#include<iostream> #include<cmath> #include<vector> #include<algorithm> #define int long long using namespace std; const int 展开全文
头像 付晗成
发表于 2025-12-02 22:01:53
//看完题目:哇,这么水! //看完数据范围:long long 都存不下,该怎么办? //不过,我突然想到:将a对b取模,就可以存下了,随后便可用__gcd()计算 //完整代码如下,第16行是取模部分 #include<bits/stdc++.h> #define int long 展开全文
头像 此在Dasein
发表于 2025-12-02 06:44:51
算法思想 由于 的位数最大可达 ,无法直接存储为普通整数,而 在常规整数范围内。计算 可利用欧几里得算法的性质: 因此只需先求出 ,之后再用常规的欧几里得算法计算两数的最大公约数。 可通过模拟大数取模的过程:从左到右逐位处理,用当前余数 更新为 最终 即为所求余数。 代码实现 #in 展开全文
头像 quchen666
发表于 2025-12-02 10:19:51
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { string a; ll b; cin>>a>>b; ll res 展开全文
头像 iui2006x
发表于 2025-12-02 10:49:06
由于精度问题,必须要开longlong,其实核心代码很简单 #include <bits/stdc++.h> using namespace std; int main() { string sa; long long a = 0, b; cin >> 展开全文
头像 花碗
发表于 2025-12-02 20:14:35
高位数求最大公约数 注意到a%b后就在int范围内了 故先取% 在余数相乘过程中可能会越界用long long转换对大数运算时要考虑每次加乘运算后是否越界 #include <iostream> #include<cstring> using namespace std; 展开全文

等你来战

查看全部