题目,如图所示,是求一个高精度和一个低精度的gcd,我们可以先把gcd(a,b)转成gcd(b,a%b)这样就转成低精度了,也就是我们要计算一下高精度的a模上b的值
这里我们需要知道一个算法,叫秦九韶算法
如图,这就是秦九韶算法,我们只需要算a%b的时候,每次循环都取一次模就行了
#include <iostream>
using namespace std;
typedef long long ll;
string a;
ll b;
ll calc()
{
ll t = 0;
for(auto &e : a)
{
t=t*10+(e-'0');
t%=b;
}
return t;
}
ll gcd(int a,int b)
{
if(!b) return a;
return gcd(b,a%b);
}
int main()
{
cin >> a >> b;
cout << gcd(b,calc()) << endl;
return 0;
}