q=5√+12 ,在黄金系统下面 ai(i∈[1,n]) 等于 ∑ni=0ai ˙qn−i ,其中 ai∈{0,1} 。
现在给出两个黄金系统下面的数字,请比较他们的大小。
先推一下:
q0=1
q1=5√+12
q2=(5√+1)24=6+25√4=5√+32
发现 q2=q1+q0
于是有: qi+2=q2 ˙qi=(q1+q0) ˙qi=qi+1+qi
这不就是斐波拉契数列??
于是就可以做了
斐波拉契数列的判大小,看程序吧
#define N 100010
char a[N],b[N];
int n,m,c[N],d[N];
int main()
{
scanf("%s%s",a+1,b+1);
n=strlen(a+1);
m=strlen(b+1);
fr(i,1,n)
c[i]=a[n-i+1]-48;
fr(i,1,m)
d[i]=b[m-i+1]-48;
while(!c[n])
n--;
while(!d[m])
m--;
n=max(n,m);
fr(i,1,n)
c[i]-=d[i];
fd(i,n,1)
{
if(c[i]>=2)
{
printf(">\n");
return 0;
}
if(c[i]<=-2)
{
printf("<\n");
return 0;
}//这两个在下面解释
if(i>=3)
{
c[i-1]+=c[i];
c[i-2]+=c[i];
c[i]=0;
}
}
if(c[2]<0)
printf("<\n");
else
if(c[2]>0)
printf(">\n");
else
if(c[1]<0)
printf("<\n");
else
if(c[1])
printf(">\n");
else
printf("=\n");//最后两位特判掉(相当于边界)
return 0;
}
解释:
满足 cj∈{−1,0,1}(j<i) 且有 ci=2(or−2)
∴C={⋯,x,a,b,2}(a,b∈{−1,0,1})→C={⋯,x,a+2,b+2}
我们可以得到: a+2>0,b+2>0
在提出来: C={⋯,x+1,a+3,b+1}
其中: b+1≥0,a+3≥2
又得到了开始的情况!
所以
C
一定是大于
然后 ci=−2 的情况同理: C<0