D2. Up the Strip(递推)

Posted Harris-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了D2. Up the Strip(递推)相关的知识,希望对你有一定的参考价值。

D2. Up the Strip(递推)

考虑如何从 f i − 1 → f i f_{i-1}\\rightarrow f_i fi1fi

显然操作1多了 f i − 1 f_{i-1} fi1,操作二多了 f 1 f_1 f1

所以 f i = 2 f i − 1 + 1 f_i=2f_{i-1}+1 fi=2fi1+1

除此外,所有 i i i的因数都会相对于 ( i − 1 ) (i-1) (i1)加1,因为

e p : i = 4 , 4 2 = 2 , ( 4 − 1 ) 2 = 1 ep: i=4,\\dfrac{4}{2}=2,\\dfrac{(4-1)}{2}=1 ep:i=4,24=2,2(41)=1

所以就类似素数筛,更新一下即可。

注意 f 2 f_2 f2特判。

时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)

int n,m;
ll f[N];
int main(){
	scanf("%d%d",&n,&m);
	f[1]=1;
	for(int i=2;i<=n;i++){
		if(i==2) f[i]=2;
		else {
			f[i]=(f[i]+2*f[i-1]+1)%m;
		}
		ll x=f[i]-f[i-1];
		for(int j=2*i;j<=n;j+=i) f[j]+=x;
	}
	printf("%lld\\n",(f[n]%m+m)%m);
	return 0;
}

以上是关于D2. Up the Strip(递推)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #740 (Div. 2) D1. Up the Strip (simplified version)

Codeforces Round #740 (Div. 2) D1. Up the Strip (simplified version)

整除分块前缀和DPD. Up the Strip(简单版 + 正常版)

整除分块前缀和DPD. Up the Strip(简单版 + 正常版)

筛法应用CF1558B - Up the Strip

筛法应用CF1558B - Up the Strip