LOJ6358 前夕
上来4的倍数又要交集恰好 单位根反演+二项式反演定了(
具体推柿子放下面了qwq
g(n) = \sum_{i=n}^N f(i) \binom{i}{n} \\g(n) = \binom{N}{n} (2^{2^{N-n}}-1) \\f(n) = \sum_{i=n}^N \binom{i}{n} (-1)^{n-i} g(i) \\ ans = \sum_{n=0}^N [n\%4==0] f(n) \\ans= \sum_{n=0}^N \sum_{j=0}^3 w_4^{nj} f(n) \\ans= \sum_{n=0}^N \sum_{i=n}^N \sum_{j=0}^3 w_4^{nj}(-1)^{i-n}g(i)\binom{i}{n}\\ans= \sum_{i=0}^N (-1)^i g(i) \sum_{n=0}^i \sum_{j=0}^3 w_4^{nj} (-1)^n \binom{i}{n}\\ans= \sum_{i=0}^N (-1)^i g(i) \sum_{j=0}^3 (-w_4^{j}+1)^i
里面那个-1是为了方便处理空集(不然空集可能加上可能被容斥掉了x)
然后憨憨hywn发现自己不会快速求2^{2^{N-n}} 被大爹suncb教了一发...直接每次平方就好了...我可能是个sbx
于是就做完啦
(第一次推完这么长柿子好感动)

//Love and Freedom. #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #define ll long long #define inf 20021225 #define mdn 998244353 #define G 3 #define inv4 748683265ll using namespace std; int read() { int s=0,t=1; char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-') t=-1; ch=getchar();} while(ch>='0' && ch<='9') s=s*10+ch-'0',ch=getchar(); return s*t; } int ksm(int bs,int mi) { int ans=1; while(mi) { if(mi&1) ans=1ll*ans*bs%mdn; bs=1ll*bs*bs%mdn; mi>>=1; } return ans; } #define N 10000001 int w[4][2],fac[N],inv[N],g[N]; int C(int n,int m){return n<m?0:1ll*fac[n]*inv[m]%mdn*inv[n-m]%mdn;} int main() { int n=read(); int Wn=ksm(G,(mdn-1)/4); int ans=0; for(int i=0;i<4;i++) w[i][0]=1; for(int i=0;i<4;i++) w[i][1]=(-ksm(Wn,i)+1+mdn)%mdn; fac[0]=1; for(int i=1;i<=n;i++) fac[i]=1ll*fac[i-1]*i%mdn; inv[n]=ksm(fac[n],mdn-2); for(int i=n;i;i--) inv[i-1]=1ll*inv[i]*i%mdn; g[n]=2; for(int i=n;i;i--) g[i-1]=1ll*g[i]*g[i]%mdn; for(int i=0;i<=n;i++) { int val=0; for(int j=0;j<4;j++) (val+=w[j][0])%=mdn,w[j][0]=1ll*w[j][0]*w[j][1]%mdn; (ans+=1ll*(g[i]-1)*C(n,i)%mdn*(i&1?mdn-1:1)%mdn*val%mdn*inv4%mdn)%=mdn; } printf("%d\n",ans+1); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)