NOIP模擬賽 一道挖掉背景的數學題

2022-09-02 00:03:27 字數 1163 閱讀 2662

time limit:1000 ms

memory limit:131072 kbytes

給定n與p,求\(\left\lfloor x^n\right\rfloor \% p\),x=\(\frac+1}\)。

輸入一行,兩個非負整數n,p。

輸出乙個整數,表示答案

5 97

今天寫道數學題吧owo

這道題我們看到\(\frac}1}}\),那麼我們容易想到另乙個無理數\(\frac\)對吧?

因為這兩個無理數是方程\(t^2-t-1=0\)的兩根

那麼數學好的大佬肯定一眼看出這個特徵方程對應的遞推通式是\(f[i]=f[i-1]+f[i-2]\)

我們首先設\(x1=\frac}1}}\),\(x2=\frac\)

那麼其實這個遞推式的通式其實就是\(f[n]=c1*x1^n+c2*x2^n\)

具體這個遞推式是什麼呢?我們並不在乎對吧(引用:我又不是數學老師)

為了得到\(x1^n\),我們不妨假設這個遞推式的通項式為\(f[n]=(\frac}1}})^n+(\frac)^n\)

首先我們將0,1帶入遞推通式得到\(f_0=2,f_1=1\),那麼我們所得到的遞推式每一項都必然是乙個整數

由於\(-1<\frac<0\),顯然\(\begin

-1<(\frac)^n<0& \text \\

0<(\frac)^n<1& \text

\end\)

那麼我們只要對於n的奇偶性討論一下,如果是奇就直接輸出\(f[n]\),否則輸出\(f[n]-1\)

剩下就是乙個矩陣乘法求遞推第n項,因此很容易求解

#includelong long n;

int zqm,f0,f1;

struct ra,c;

r operator *(r a,r b)

int main()

if (n==1)

n-=2;

int ans=0;

if (!(n&1)) ans--;

a=(r);

c=a;

while (n)

ans=(c.a*1ll*f1+f0*1ll*c.b+ans)%zqm;

printf("%d",ans);

return 0;

}

一道模擬賽的題

這是乙個不錯的題啊,在這裡記錄一下 聽說不是原創題,那我就放上來了。應該沒有關係吧qaq 有乙個 n m 的地圖,地圖上的每乙個位置可以是空地,炮塔或是敵人.你需要操縱炮塔消滅敵人.對於每個炮塔都有乙個它可以瞄準的方向,你需要在它的瞄準方向上確定乙個它的攻擊位置,當然也可以不進行攻擊.一旦乙個位置被...

Noip模擬賽 C(一道環套樹的神奇題目)

前置知識 乙個聯通圖沒有有偶環 它是環套樹或者樹 仙人掌 沒有2個環共用相鄰的邊 over 為啥呢 因為若是2個環有相鄰的邊,那麼就存在乙個大環的邊數 奇 奇 2 重複的邊,顯然這是乙個偶數 over 環套樹的一些性質 m n 自己想去 所以對於乙個奇環森林就可以做到每個點配對乙個邊。好,現在考慮題...

noip模擬賽 拼不出的數

分析 如果每個數可以選任意多次,那麼就是乙個很普通的dp問題,這裡每個數只能選一次,還是考慮dp,設f i 表示1 i是否都能選上.考慮下乙個數j,如果j i 1,那麼i 1這個數就選不上,答案就是i 1,否則f i 可以轉移到f i j 這個演算法是建立在集合有序的情況下的,所以要先排序.incl...