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 ...