首页 > 其他分享 >题解 CF678D【Iterated Linear Function】

题解 CF678D【Iterated Linear Function】

时间:2023-01-14 11:35:26浏览次数:42  
标签:Function return 题解 LL 一次函数 func 结合律 CF678D id

暴力解法。

初学群论,可能写的不是很严谨,望大佬指正。

problem

\[g^{(n)}(x)=\begin{cases} x,&(n=0).\\ f(g^{(n-1)}),&(n>0). \end{cases}\]

其中 \(f\) 是一次函数。给出 \(f\) 的表达式与 \(n,x\),求 \(g^{(n)}(x)\)。\(n\leq 10^{18}\),答案对 \(P\) 取模。

solution

对于两个整式(这里指单项式与多项式的合称) \(f,g\),我们定义它们的复合 \((f*g)(x)=f(g(x)).\) 其中 \(*\) 是我们自己定义的对于两个整式的二元运算。

则 \(g^{(n)}=f*g^{(n-1)}=f*f*g^{(n-2)}=\cdots=\begin{matrix}n\text{ 个 }f\\\overbrace{f*f*\cdots*f}*id\end{matrix}.\) 其中 \(id(x)=g^{(0)}(x)=x.\)
我们注意到 \(f,h\) 都是一次函数,这非常方便。

下面证明:

两个一次函数复合后仍为一次函数。

证明 令 \(f(x)=kx+b,g(x)=k'x+b'\),则 \(f*g=f(g(x))=k(k'x+b)+b'=(k\cdot k')x+(kb+b').\)

整式的复合具有结合律:\((f*g)*h=f*(g*h)\)。

证明 \(LHS=RHS=f(g(h(x))).\)

\(*\) 运算的单位元是 \(id\)。

证明 \((f*id)(x)=f(id(x))=f(x),(id*f)(x)=id(f(x))=f(x).\)

因为 \(*\) 有单位元和结合律,于是我们可以用一种类似于快速幂的方法,求出 \(f\) 自己复合自己 \(n\) 次后的结果,代入 \(x\) 即可。\(O(\log n)\)。

因为快速幂只依赖于一个单位元和结合律,这也是矩阵快速幂可行所在。若将文中 \(f\) 换为矩阵,也可以用这样的方法分析出快速幂的正确性。

code

点击查看代码
typedef long long LL;
const int P=1e9+7;
struct func{
	LL k,b;
	func(LL k=1,LL b=0):k(k),b(b){}
	func operator*(func g){
		//k(k'x+b')+b
		return func(k*g.k%P,(k*g.b+b)%P);
	}
	LL operator()(LL x){return (k*x+b)%P;}
};
template<class T> T qpow(T a,LL b){
	T r=func(1,0);
	for(;b;a=a*a,b>>=1) if(b&1) r=r*a;
	return r;
}
LL n,A,B,x;
int main(){
	scanf("%lld%lld%lld%lld",&A,&B,&n,&x);
	printf("%lld\n",qpow(func(A,B),n)(x));
	return 0;
}

标签:Function,return,题解,LL,一次函数,func,结合律,CF678D,id
From: https://www.cnblogs.com/caijianhong/p/solution-CF678D.html

相关文章

  • 【题解】CF848C Goodbye Souvenir
    冷漠和缄默思路cdq分治。有各种懂哥写了科技做法,比如树套树和二维分块,有点离谱。首先考虑答案的形式。令\(lst_i\)为\([1,i)\)中\(a_i\)最后一次出现的位置,则......
  • AGC060 题解
    Wow,ChristmasRound.--Tom66A.NoMajority(1300)结论:若一个序列有严格众数,则序列中必有两个相同数字位置之差为\(1\)或\(2\)。证明设序列长为$k$,则严格......
  • [Typescript] Use Generics in a Reduce Function
    Seethiscode:constarray=[{name:'John',},{name:'Steve',},];constobj=array.reduce((accum,item)=>{accum[item.name]=item......
  • vue 使用echarts图表 setOption多次很卡问题解决
    项目场景:在开发ISM组态软件时,使用echarts图表,拖拽图表很卡。问题描述在vue中使用echarts使用setOption更新加载图形很慢原因分析:由于this.echartsView=echarts.init(view,......
  • Ubuntu Server20.04 sssd+samba4共享无法访问问题解决
    UbuntuServer20.04sssd+samba4共享无法访问问题解决报错: \\ipisnotaccessible排查:在samba的log里(/var/log/samba/log.ip)能看到winbinddnotrunning解决:#apt-getins......
  • IOI 2019 题解
    Day1A排列鞋子从前往后考虑每个位置\(i\),并找到与它匹配的最靠前的元素,将这两个元素放在最靠前的空位置,最后算一下逆序对个数即可。Day1B景点划分假设\(a\leb\le......
  • 【题解】CF893F Subtree Minimum Query
    那个……令姐……能以成亲为前提……和我交往吗(娇羞)集训完刚好开方舟春活,并且我刚好攒够了给令姐买衣服的石头,这真的是巧合吗?思路各种做法,但是有强化版。首先是naive......
  • 题解 P8294 [省选联考 2022] 最大权独立集问题
    Solution根据一些逝去的记忆可以得到一个DP状态:\(f_{u,x,y}\)表示\(u\)这棵子树,\(x\)从子树出去,\(y\)进来这棵子树。然后讨论一下状态转移,可以暴力枚举状态,暴力枚......
  • CF244A Dividing Orange 题解
    Description有\(n\timesk\)个橘子,\(k\)个小朋友每人拿\(n\)个,但是每个人都指定了一个橘子\(a_i\),分配时必须要把\(a_i\)给第\(i\)个小朋友,求任一分配方案。So......
  • js加法精度问题解决
    //加法exportconstnumAdd=(num1,num2)=>{letbaseNum,baseNum1,baseNum2try{baseNum1=num1.toString().split('.')[1].length}cat......