hdu 4565So Easy!

來源:互聯網
上載者:User

公式推導:( a + b ^ 0.5 ) ^ n +  ( a - b ^ 0.5 ) ^ n = Ck, Ck * ( ( a + b ^ 0.5 )  + ( a - b ^ 0.5 ) ) = ( ( a + b ^ 0.5 )  + ( a - b ^ 0.5 ) ) * ( a + b ^ 0.5 ) ^ n +  ( a - b ^ 0.5 ) ^ n => 2 * a * Ck = Ck+1 + (a * a - b) * Ck-1   => Ck+1 + Ck = Ck * (2 * a + 1 ) + (a * a - b) * Ck-1  ==>  Ck + 1      =   2 * a       b - a * a      *       Ck         Ck                  1             0                           Ck -1==>  Ck + 1      =   2 * a       b - a * a     ^  n         *           2 * a         Ck                  1             0                                            2//#pragma comment(linker, "/STACK:102400000,102400000")#include <cstdio>#define LL long longLL s[2], m;struct node {LL arr[2][2];};node power(node p, int pos){if(pos == 1) return p;node v = power(p, pos / 2);node q;q.arr[0][0] = (v.arr[0][0] * v.arr[0][0] + v.arr[0][1] * v.arr[1][0]) % m;q.arr[0][1] = (v.arr[0][0] * v.arr[0][1] + v.arr[0][1] * v.arr[1][1]) % m;q.arr[1][0] = (v.arr[1][0] * v.arr[0][0] + v.arr[1][1] * v.arr[1][0]) % m;q.arr[1][1] = (v.arr[1][0] * v.arr[0][1] + v.arr[1][1] * v.arr[1][1]) % m;if(pos % 2 == 0) return q;v.arr[0][0] = (q.arr[0][0] * p.arr[0][0] + q.arr[0][1] * p.arr[1][0]) % m;v.arr[0][1] = (q.arr[0][0] * p.arr[0][1] + q.arr[0][1] * p.arr[1][1]) % m;v.arr[1][0] = (q.arr[1][0] * p.arr[0][0] + q.arr[1][1] * p.arr[1][0]) % m;v.arr[1][1] = (q.arr[1][0] * p.arr[0][1] + q.arr[1][1] * p.arr[1][1]) % m;return v;}int main(){   // freopen("in.txt", "r", stdin);    LL a, b;    int n;    while (scanf("%I64d %I64d %d %I64d", &a, &b, &n, &m) != EOF){    if(n == 1){    printf("%lld\n", a * 2 % m);    continue;    }        s[0] = 2 * a % m, s[1] = 2;        node p;        p.arr[0][0] = a * 2 % m;        p.arr[0][1] = (b - a * a) % m;        p.arr[1][0] = 1, p.arr[1][1] = 0;        node q = p;        q = power(p, n - 1);        printf("%I64d\n", (q.arr[0][0] * s[0] % m + q.arr[0][1] * s[1] % m + m * 2) % m);    }    return 0;}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.