快afo了才第一次寫二次剩餘的題……
顯然應該將fn寫成通項公式(具體是什麼寫起來不方便而且大家也都知道),設t=((1+√5)/2)n,t=√5n,然後可以得到t-(-1)t/t=√5n,兩邊同時乘t,移項,得到t2-√5nt-(-1)n=0。分別討論n是奇數或偶數的情況,通過求根公式求t,寫個二次剩餘即可。
#includeusingview codenamespace
std;
const
int sq5=383008016,inv2=5e8+5,mod=1e9+9,inf=0x7fffffff
;int n,w,ans=inf;
mapmp;
struct
com;}
};int qpow(int a,int
b)
return
ret;
}int sqrt(int
n),ans=(com);
int y=inv2;
w=(1ll*a*a%mod+mod-n)%mod;
while
(y)
return
ans.x;
}int bsgs(int t,int
n)
return -1;}
intmain()
if(r1)
if(ans==inf)puts("
-1");else printf("%d"
,ans);
}
BZOJ5104 Fib數列(二次剩餘 BSGS)
傳送門 題意 給定a 求fn a mod1e 9 9 輸出最小的 n 題解 fib數列的通項 fn 15 1 5 2 x 1 5 2 n 5 是1e9 9的一類二次剩餘。可以對其開根號 5 3830080162 mod1e9 9 開根號的方法 設x 1 5 2,t 5 a那麼公式可表達為 xn 1 ...
計蒜客 Fib數列問題二
用 fib n 表示斐波那契數列的第 n項,現在要求你求 fib n mod m。fib 1 1,fib 2 1。輸入格式 輸入 2 個整數 n 1 n 10 18 m 2 m 100000000 輸出格式 輸出 fib n 對 m 取模的值。樣例輸入 100000000 100000000 樣例輸...
BZOJ4282 慎二的隨機數列
省選前刷水記錄 構造 很顯然我們要讓那些未知的都加入最終答案 這樣子答案才最大 然後就很簡單了。很奇怪的是本地int main 不加int不會報錯 oj上會ce include include include using namespace std define ll long long int c...