首页 > 其他分享 >P10084 [GDKOI2024 提高组] 计算 题解

P10084 [GDKOI2024 提高组] 计算 题解

时间:2024-02-27 22:01:20浏览次数:21  
标签:md phi frac gcd GDKOI2024 int 题解 ans P10084

先考虑怎么求 \(F(x,a,b)\),易得 \(\gcd(x^a-1,x^b-1)=x^{\gcd(a,b)}-1\)。

所以 \(L=m^{\gcd(a,b)}+1,R=m^{\gcd(c,d)}\),然后发现 \([L,R]\) 中的数模 \(m\) 后每种余数出现次数相同,下面记其为 \(n=\frac{R-L}{m}\)。

考虑用生成函数做,易得答案为:

\[\sum_{i=0}^{\infty}[m\mid i][x^i]\prod_{j=0}^{m-1}(x^j+1)^n \]

套一下单位根反演的式子 \(\sum_{k=0}^{\infty}[n\mid k]f_k=\frac{1}{m}\sum_{i=0}^{m-1}f(\omega_m^i)\) 得:

\[\frac{1}{m}\sum_{i=0}^{m-1}\prod_{j=0}^{m-1}(\omega_m^{ij}+1)^n \]

注意到 \(\omega_m^m=1\)。设 \(d=\gcd(m,i)\),那么 \(ij \operatorname{mod} m\) 对于所有 \(j=0,1,\dots,m-1\) 恰好取遍了 \(\{0,d,2d,\dots,m-d\}\) 中的每个数各 \(d\) 次,于是枚举 \(d\),式子转化为:

\[\begin{aligned} &\frac{1}{m}\sum_{k|m}\varphi(\frac{m}{k})\prod_{j=0}^{m/k-1}(\omega_m^{kj}+1)^{nk}\\ =&\frac{1}{m}\sum_{k|m}\varphi(\frac{m}{k})\left(\prod_{j=0}^{m/k-1}(\omega_{m/k}^{j}+1)\right)^{nk} \end{aligned} \]

考虑右边这个括号里的东西怎么求,由因式分解知识可得 \(x^k-1=\prod_{i=0}^{k-1}(x-\omega_k)\),带入 \(x=-1\) 就出来了,于是式子转化为:

\[\frac{1}{m}\sum_{k|m}\varphi(\frac{m}{k})2^{nk}[2\nmid \frac{m}{k}] \]

然后直接 \(\mathcal O(\sqrt m)\) 枚举 \(m\) 的每个因子做就好了,可以通过此题。

参考代码:

#include<bits/stdc++.h>
#define ll long long
#define mxn 10000003
#define md 998244353
#define rep(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
ll power(ll x,int y){
	ll ans=1;
	for(;y;y>>=1){
		if(y&1)ans=ans*x%md;
		x=x*x%md;
	}
	return ans;
}
ll power1(ll x,int y){
	ll ans=1;
	for(;y;y>>=1){
		if(y&1)ans*=x;
		x*=x;
	}
	return ans;
}
inline int gcd(int x,int y){
	while(y^=x^=y^=x%=y);
	return x;
}
int t,m,a,b,c,d,tot,p[mxn],f[mxn],phi[mxn];
ll l,r,n,g,ans;
void init(int n){
	phi[1]=1;
	rep(i,2,n){
		if(!f[i])f[i]=p[++tot]=i,phi[i]=i-1;
		rep(j,1,tot){
			if(p[j]>f[i]||p[j]>n/i)break;
			f[p[j]*i]=p[j];
			phi[p[j]*i]=i%p[j]?phi[i]*(p[j]-1):phi[i]*p[j];
		}
	}
}
signed main(){
	init(1e7);
	scanf("%d",&t);
	while(t--){
		scanf("%d%d%d%d%d",&m,&a,&b,&c,&d);
		l=a==0||b==0?0:power1(m,gcd(a,b));
		r=power1(m,gcd(c,d));
		n=(r-l)/m;
		ans=0;
		g=power(2,n%(md-1));
		rep(k,1,sqrt(m))if(m%k==0){
			if(k&1)ans=(ans+phi[k]*power(g,m/k))%md;
			if(m/k!=k){
				if((m/k)&1)ans=(ans+phi[m/k]*power(g,k))%md;
			}
		}
		printf("%lld\n",(ans*power(m,md-2)%md+md)%md);
	}
	return 0;
}

标签:md,phi,frac,gcd,GDKOI2024,int,题解,ans,P10084
From: https://www.cnblogs.com/zifanoi/p/18038502

相关文章

  • [ABC331G] Collect Them All 题解
    洛谷传送门AT传送门\(\textbf{Statement.}\)有\(M\)种颜色,用\(1\simM\)编号,每次抽奖抽中第\(i\)种颜色的概率为\(\frac{c_i}{N}\),其中\(\sumc_i=N\),求抽中每种颜色至少一次的期望次数。\(1\leM\leN\le2\times10^5\)。\(\textbf{Solution.}\)发现直接求不好......
  • [ARC087F] Squirrel Migration 题解
    洛谷题面AT题面如果两条路径不存在交点,则两条路径各选一个端点交换后两路径相交,答案不会变劣。考虑所有路径两两相交的情况,因为图是一棵树,所以这些路径会交于一点。以这个点为根,那么最大的子树大小一定不超过\(\fracn2\),所以这个点是树的重心,每条路径的端点一定在两个不......
  • 个人题解:2024 年湖北省省队选拔集训暨能力测试 第一试
    时与风对每条边进行BFS。二维偏序部分用vector存一下就行了。花神诞日引理:对于\(a<b<c\),\(\min(a\text{XOR}b,b\text{XOR}c)\leqa\text{XOR}c\)。证明:考虑比较\(a,c\)二进制下第一位不同,也就是\(a=(X0\dots)_{(2)},c=(X1\dots)_{2}\)。因为\(b\in(a,c)\)所以......
  • CSP-S 2023 题解
    T1一开始所有密码都没被标记。对于每个输入的状态枚举一遍所有没标记的密码,判断是否可能是正确密码,如果不行就标记一下。最后输出没被标记的密码个数。总共只有\(10^5\)个密码,可以轻松通过。难度:橙。T2见CF1223FStackExterminableArrays题解。难度:蓝。T3大模拟,直......
  • 2024牛客寒假算法基础集训营5 题解 ( A,C,G,H,I,L,M )
    2024牛客寒假算法基础集训营5题解(A,C,G,H,I,L,M)A mutsumi的质数合数题意有一个由\(n\)个正整数组成的数组,她想知道数组中质数和合数共有几个。思路由质数和合数的定义可知,正整数范围内除\(1\)外,要么是质数要么是合数,本题直接统计不是\(1\)的正整数的个数即可代码......
  • 题解 CF963E Circles of Waiting
    令\(f_{i,j}\)表示\((i,j)\)走出以\((0,0)\)为圆心,半径为\(R\)的期望步数,显然所有在圆外的点\((i,j)\)满足\(f_{i,j}=0\)。有\(f_{i,j}=p_1f_{i-1,j}+p_2f_{i,j-1}+p_3f_{i+1,j}+p_4f_{i,j+1}\)。这东西很套路,高斯消元就行,但状态数是\(O(R^2)\)的,复杂度\(O(R^......
  • 题解 CF725G Messages on a Tree
    updateon2023.8.9修正了一些错误。\(\texttt{link}\)第\(i\)条信息的传输可以表示成\(x_i\)走到\(x_i\)的某一祖先再走回\(x_i\)的路径。所以答案只和\(x_i\)的这一祖先有关,记为\(f_i\),则\(ans_i=t_i+2\timesdep_{x_i}-2\timesdep_{f_i}\)。若\(x_i\)在\(f......
  • 题解 CF1781G Diverse Coloring
    \(\texttt{link}\)题意给定一棵\(n\)个点的二叉树,现对其每个点染成黑色或白色。一种合法的染色方案满足:对于所有黑色的点,都存在白色的点与之相邻。对于所有白色的点,都存在黑色的点与之相邻。一种染色方案的权值是染成黑色的点数与染成白色的点数之差的绝对值。\(\foral......
  • 题解 CF1523H Hopping Around the Array
    \(\texttt{link}\)题意数轴上有\(n\)个点,每个点有属性\(a_i\),在第\(i\)个点可以花费\(1\)的步数移动至\([i,i+a_i]\)中任意一个点。定义一次操作为选出一个\(i\),使\(a_i\getsa_i+1\)。\(q\)组询问,每次给出\(l,r,k\),求有\(k\)次操作机会时,从第\(l\)个点走到......
  • 题解 CF983D Arkady and Rectangles
    \(\texttt{link}\)题意平面直角坐标系上给定\(n\)个矩形,第\(i\)个矩形颜色为\(i\),颜色大的矩形将覆盖颜色小的矩形,问最后能看到几种颜色。\(1\len\le10^5,|x_i|,|y_i|\le10^9\)题解首先离散化,考虑扫描线如何维护序列上的颜色。一个区间\([l,r]\)投射到线段树上\(......