51nod1491

q=5+12 ,在黃金系統下面ai(i[1,n]) 等於ni=0ai ˙qni ,其中ai{0,1}

現在給出兩個黃金系統下面的數字,請比較他們的大小。

先推一下:

q0=1

q1=5+12

q2=(5+1)24=6+254=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(or2)

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+10,a+32

又得到了開始的情況!

所以C 一定是大於0 的!

然後ci=2 的情況同理:C<0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章