bzoj
洛谷考慮一下遞推式
發現一定可以寫成乙個 xi
+1=(
x1+c
)∗ai
−c的形式
直接暴力解一下 xi
+1+c
=a(x
i+c)
解得c=
ba−1
這樣子,相當於得到了乙個k∗
ax≡t
+c(m
odp)
這樣的式子
這個顯然是個裸的bs
gs直接解出來就行了
注意特判一下a=
0,a=
1,x1
=t這幾種情況。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define ll long long
#define rg register
inline
int read()
int fpow(int a,int b,int mod)
return s;
}const
int hashmod=111111;
struct hashtable
e[100000];
int h[hashmod],cnt;
void add(int u,int v,int w);h[u]=cnt;}
void clear()
void insert(int x,int i)
int query(int x)
}hash;
int bsgs(int a,int y,int z,int p)
return -2;
}int main()
if(a==0)
if(a==1)
t=(t+p-x1)%p;
t=1ll*t*fpow(b,p-2,p)%p;
printf("%d\n",t+1);
continue;
}c=1ll*b*fpow(a-1,p-2,p)%p;
t=(t+c)%p;x1=(x1+c)%p;
printf("%d\n",bsgs(x1,a,t,p)+1);
}return
0;}
bzoj3122 隨機數生成器 BSGS
這道題目真是太坑爹了。狂wa無數次。將原來那個看成x0,最後答案再加1,這樣會簡單一點,假設答案是n 最後需要 1 那麼不斷迭代會發現 xn a nx0 a n 1 a n 2 1 b t mod p 然後運用等比數列公式得到a nx0 a n 1 a 1 b t mod p 兩邊同乘 a 1 移項...
隨機數生成器
標頭檔案 內容 rand,srand函式和rand max常量 rand max 在windows系統中為32767 在類unix系統中為2147483647 rand 函式返回乙個0 rand max的隨機整數 srand seed 函式 接受unsigned int 型別的引數seed,以see...
Bzoj2875 隨機數生成器
題目描述 棟棟最近迷上了隨機演算法,而隨機數是生成隨機演算法的基礎。棟棟準備使用線性同餘法 linear congruential method 來生成乙個隨機數列,這種方法需要設定四個非負整數引數m,a,c,x 0 按照下面的公式生成出一系列隨機數 x n 1 ax n c mod m用這種方法生...