51nod 1573 分解 矩陣快速冪

2021-07-22 06:50:21 字數 1454 閱讀 8807

51nod 演算法馬拉松17(告別奧運)b 分解 51nod 演算法馬拉松17(告別奧運)b 分解

題意 :給出乙個

n ,問(1

+2√)

n能否拆成m−

−√+m

−1−−

−−−√

的形式,如果能,輸出

m ,否則輸出 no。

想法觀察(

1+2√

)n,它總能寫成a+

b2√ 的形式,如果a2

n=m,

2∗b2

n=m−

1 或者a2

n=m−

1,2∗

b2n=

m ,那就可以了。 於是我們設(1

+2√)

n=an

+bn2

√ ,不難找到(a

nbn)

=(a1

b1)(

1211

)n−1

#include

using

namespace

std;

const

int maxn = 105;

const

int mod = 1e9 + 7;

int t = 2;

struct mat

void unit()

void fro()

void print()

}};mat operator * (const mat a, const mat b)

mat operator ^ (mat a, long

long b)

return r;

}int main()

else

if(m == 1)

a = (a^(m-1));

long

long t = a.v[0][0] + a.v[1][0];

long

long s = a.v[0][1] + a.v[1][1];

long

long tm = (t % mod) * (t % mod) % mod;

long

long sm = ((s % mod) * (s % mod) * 2 + 1 )% mod;

long

long ms = ((s % mod) * (s % mod) * 2 - 1 + mod)% mod;

if(tm == sm)

cout

<< tm << endl;

else

if(tm == ms)

cout

<< (tm + 1 + mod) % mod << endl;

else

cout

<< "no"

<< endl;

return

0;}

51nod 1537 分解(矩陣快速冪)

參考 標程中提到了構造對偶式,我去,這咋整啊,搞不了 但是就根據標程來推,這些東西都能推出來。奇偶都能推出來sqrt m sqrt m 1 a b sqrt 2 然後根據 1 2 n a b 2打個表,找規律就好了。找不到規律的話,拿著序列去oeis一查就知道了 include using name...

51Nod 1537 分解(矩陣快速冪)

博主鏈結 給乙個n,求出對應m滿足 1 sqrt 2 n sqrt m sqrt m 1 可以將 1 sqrt 2 n一項項拆開後發現 sqrt 1 sqrt 2 sqrt 9 sqrt 8 sqrt 49 sqrt 50 sqrt 492 9 sqrt 492 10 發現如果n為奇數f n f n...

51Nod 1113 矩陣快速冪

acm模版 模版題,矩陣快速冪,很直白的一道題。需要好好研究一下矩陣的知識了 include using namespace std define maxn 111 define mod x x mod define mod 1000000007 define ll long long int n ...