高精度GCD
前言
昨天晚上,我做了一个很古怪的梦。
我梦见我写出了高精度GCD。
别喷,这是真事!!!
高精度GCD
言归正传,既然我梦见我写了GCD,那么我们来实现一下吧。
低精度GCD的实现
相信大家都知道 辗 转 相 除 法 辗转相除法 辗转相除法和 辗 转 相 减 法 辗转相减法 辗转相减法吧。我们这次实现就要用他们两,我先给大家一个低精度的辗转相除法:
int gcd(int x,int y)
{
if(y==0) return x;
return gcd(y,x%y);
}
递归的经典实现,那我们再来看看低精度的辗转相减法:
int gcd(int x,int y)
{
int t;
while(y!=0)
{
t=x;
x=y;
y=t%y;
}
}
高精度GCD
知道了这两个方法,那我们来实现吧!
d i v \color{yellow}div div函数
我们先打出一个函数div
,代表求出它的余数
div的实现:
string div(string n1,string n2,int nn)
{
const int L=1e5;
string s,v;
int a[L],b[L],r[L],La=n1.size(),Lb=n2.size(),i,tp=La;
fill(a,a+L,0);fill(b,b+L,0);fill(r,r+L,0);
for(i=La-1;i>=0;i--) a[La-1-i]=n1[i]-'0';
for(i=Lb-1;i>=0;i--) b[Lb-1-i]=n2[i]-'0';
if(La<Lb || (La==Lb && n1<n2)) {
return n1;
}
int t=La-Lb;
for(int i=La-1;i>=0;i--)
{
if(i>=t) b