亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有人說循環節長度為2*m,起始位置是f(1),所以直接求f(n%(2*m))。對嗎?為什么?

有人說循環節長度為2*m,起始位置是f(1),所以直接求f(n%(2*m))。對嗎?為什么?

至尊寶的傳說 2023-04-25 17:13:59
錯排遞推式:f(n)=(n-1)*(f(n-1)+f(n-2)) f(1)=0,f(2)=1求f(n)%m,m<=1e5,n<=1e9,n,m為整數。
查看完整描述

2 回答

?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

循環節不超過m^2。(因為f[n]由f[n-1],f[n-2]唯一決定,在mod m下f[n-1]和f[n-2]最多有m^2種組合。)

一邊開哈希表一這算遞推,算到出現循環為止。注意循環節可能到中間才出現(想想循環小數)。


查看完整回答
反對 回復 2023-04-28
?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

你給出的這個“錯排遞推公式”,實際上有一個“直接”的計算公式:

f(n) =  n! * ((-1)^0/0! + (-1)^1 / 1! + (-1)^2 / 2! + ... + (-1)^n*1/n!)

已知

x = aX + b
y = cY + d(x + y) % m = (aX + b + cY + d) % m = (b + d) % m = (X % m + Y % m) % m

g(n) = f(n) % m

則有

g(2m + n) = ((2m + n)! * (
[1]      -1^0    / 0!    + (-1)^1      / 1!      + ... + (-1)^(m-1)  / (m-1)!
[2]  + (-1)^m    / m!    + (-1)^(m+1)  / (m+1)!  + ... + (-1)^(2m-1) / (2m-1)!
[3]  + (-1)^(2m) / (2m)! + (-1)^(2m+1) / (2m+1)! + ... + (-1)^(2m+n) / (2m+n)!
    )) % m

由于 ((2m + n)! * 任意一個前2m項) % m == 0,所以前兩行可以消掉(這個很容易看出來的吧?)

g(2m + n) 
  = ((2m + n)! * (
      (-1)^(2m) / (2m)! + (-1)^(2m+1) / (2m+1)! + ... + (-1)^(2m+n) / (2m+n)!
     )) % m~~~ 由于 (-1)^2m == 1 ~~~
  = ((2m + n)! * (
      (-1)^0 / (2m)! + (-1)^1 / (2m+1)! + ... + (-1)^n / (2m+n)!
     )) % m
  = ((-1)^0 / n! + (-1)^1 / (n-1)! + ... + (-1)^n / 0!) % m

這里已經很接近你說的結論了,由于n是奇偶的時候會影響這里的正負號,而我前面沒有證明 (x - y) % m 的公式,但是由于實際上前2m項減去后n項毫無疑問是正數(中間這些瑣碎的證明略掉),所以最終結論就是:

 g(2m + n) == g(n)


查看完整回答
反對 回復 2023-04-28
  • 2 回答
  • 0 關注
  • 203 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號