【UR #5】怎样跑得更快
给定\(n,c,d\)和序列\(\{b_i\}\),求一个序列\(\{x_i\}\)满足
\]
不难将\(\rm lcm(i,j)\)写成\(\frac{i\times j}{\gcd(i,j)}\)
即
\]
套路枚举\(\gcd\),之后套路反演一下,设\(\omega =c-d\)
则
\]
其中\(F(k)=\sum_{k|t}x_tt^d\)
套路地进行简单和式变换
\]
设\(g(n)=\sum_{d|n}\mu(\frac{n}{d})d^{\omega}\)
上式即为
\]
不难发现就是一个函数叫做\(F(k)g(k)\)卷上了一个\(1\)得到了右边那个函数,不妨称之为\(B(i)\)
则\(F(i)g(i)=(\mu\times B)(i)\)
于是\(F(i)=\frac{(\mu\times B)(i)}{g(i)}\),得到\(F\)之后再和\(\mu\)卷一波就能求\(x\)了
卷\(\mu\)完全可以用高维差分优化到\(O(n\log \log n)\),所以要是写个线筛\(i^k\)和离线求逆元就是\(O(qn\log \log n)\)复杂度了
显然我懒得写
代码
#include<bits/stdc++.h>
#define re register
const int maxn=1e5+5;
const int mod=998244353;
inline int dqm(int x){return x<0?x+mod:x;}
inline int qm(int x) {return x>=mod?x-mod:x;}
inline int read() {
char c=getchar();int x=0;while(c<'0'||c>'9')c=getchar();
while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
int f[maxn],p[maxn>>1],b[maxn],g[maxn],n,c,d;
inline int ksm(int a,int b) {
b%=(mod-1);if(b<0) b+=mod-1;
int S=1;for(;b;b>>=1,a=1ll*a*a%mod) if(b&1) S=1ll*S*a%mod;return S;
}
inline void work() {
for(re int i=1;i<=n;i++) b[i]=1ll*read()*ksm(i,-d)%mod;
for(re int i=1;i<=p[0];++i)
for(re int j=n/p[i];j;--j) b[j*p[i]]=dqm(b[j*p[i]]-b[j]);
for(re int i=1;i<=n;i++)
if(g[i]==0&&b[i]) {puts("-1");return;}else b[i]=1ll*b[i]*g[i]%mod;
for(re int i=1;i<=p[0];++i)
for(re int T=n/p[i],j=1;j<=T;++j) b[j]=dqm(b[j]-b[p[i]*j]);
for(re int i=1;i<=n;i++) printf("%d ",1ll*b[i]*ksm(i,-d)%mod);
puts("");
}
int main() {
n=read(),c=read(),d=read();c%=(mod-1),d%=(mod-1);
for(re int i=2;i<=n;i++) {
if(!f[i]) p[++p[0]]=i;
for(re int j=1;j<=p[0]&&p[j]*i<=n;++j) {
f[p[j]*i]=1;if(i%p[j]==0)break;
}
}
for(re int i=1;i<=n;i++) g[i]=ksm(i,c-d);
for(re int i=p[0];i;--i)
for(re int j=n/p[i];j;--j) g[p[i]*j]=dqm(g[p[i]*j]-g[j]);
for(re int i=1;i<=n;i++) g[i]=ksm(g[i],mod-2);
for(re int Q=read();Q;--Q) work();return 0;
}
【UR #5】怎样跑得更快的更多相关文章
- 【UOJ#62】【UR #5】怎样跑得更快(莫比乌斯反演)
[UOJ#62][UR #5]怎样跑得更快(莫比乌斯反演) 题面 UOJ 题解 众所周知,\(lcm(i,j)=\frac{ij}{gcd(i,j)}\),于是原式就变成了: \[\sum_{j=1} ...
- 「UR#5」怎样跑得更快
「UR#5」怎样跑得更快 膜这个您就会了 下面是复读机mangoyang 我们要求 \[ \sum_{j=1}^n \gcd(i,j)^{c-d} j^d x_j=\frac{b_i}{i^d} \] ...
- UOJ 【UR #5】怎样跑得更快
[UOJ#62]怎样跑得更快 题面 这个题让人有高斯消元的冲动,但肯定是不行的. 这个题算是莫比乌斯反演的一个非常巧妙的应用(不看题解不会做). 套路1: 因为\(b(i)\)能表达成一系列\(x(i ...
- 让DB2跑得更快——DB2内部解析与性能优化
让DB2跑得更快——DB2内部解析与性能优化 (DB2数据库领域的精彩强音,DB2技巧精髓的热心分享,资深数据库专家牛新庄.干毅民.成孜论.唐志刚联袂推荐!) 洪烨著 2013年10月出版 定价:7 ...
- 面试官:如何写出让 CPU 跑得更快的代码?
前言 代码都是由 CPU 跑起来的,我们代码写的好与坏就决定了 CPU 的执行效率,特别是在编写计算密集型的程序,更要注重 CPU 的执行效率,否则将会大大影响系统性能. CPU 内部嵌入了 CPU ...
- [翻译] 5点建议,让iOS程序跑得更快
[文章原地址]http://mobile.tutsplus.com/tutorials/iphone/ios-quick-tip-5-tips-to-increase-app-performanc ...
- 让你的 Node.js 应用跑得更快的 10 个技巧(转)
Node.js 受益于它的事件驱动和异步的特征,已经很快了.但是,在现代网络中只是快是不行的.如果你打算用 Node.js 开发你的下一个Web 应用的话,那么你就应该无所不用其极,让你的应用更快,异 ...
- 安装好Windows 8后必做的几件事情,让你的Win8跑的更快更流畅。
1.关闭家庭组,因为这功能会导致硬盘和CPU处于高负荷状态. 关闭方法:Win+C-设置-更改电脑设置-家庭组-离开 如果用不到家庭组可以直接把家庭组服务也给关闭了:控制面板-管理工具-服务-Home ...
- 让你的 Node.js 应用跑得更快的 10 个技巧
Node.js 受益于它的事件驱动和异步的特征,已经很快了.但是,在现代网络中只是快是不行的.如果你打算用 Node.js 开发你的下一个Web 应用的话,那么你就应该无所不用其极,让你的应用更快,异 ...
- UOJ#62. 【UR #5】怎样跑得更快 数论 莫比乌斯反演
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ62.html 题解 太久没更博客了,该拯救我的博客了. $$\sum_{1\leq j \leq n} \ ...
随机推荐
- Address already in use : connect
Address already in use : connect 错误以及处理 项目中有过手写并发测试,在长时间的并发测试(超过20秒,美妙超过2000)的情况下出现了以上错误 处理方法如下(抄的) ...
- datagridview里面的checkbox全选和取消全选
全选 设置全选button,选中所有的checkbox private void selectAll_Click(object sender, EventArgs e) { //遍历datagridv ...
- C# 对象转JSON字符串
对象转JSON字符串 /// <summary> /// 对象转Json字符串 /// </summary> /// <param name="obj" ...
- 【记录】elastiasearch 6.4.3 版本 SearchRequestBuilder字段排序,BoolQueryBuilder
参考地址: 1:https://www.cnblogs.com/shoutn/p/8027960.html 2:https://www.jianshu.com/p/8402eb930ae7 3:htt ...
- 268-基于FMC接口的DSP TMS320C6657子卡模块
基于FMC接口的DSP TMS320C6657子卡模块 一. 概述 FMC连接器是一种高速多pin的互连器件,广泛应用于板卡对接的设备中,特别是在xilinx公司的所有开发板中都使用. ...
- java super与this关键字图解、java继承的三个特点
- java两个引用指向同一个对象
- 学会如何使用shiro
摘:https://www.cnblogs.com/learnhow/p/5694876.html 一.架构 要学习如何使用Shiro必须先从它的架构谈起,作为一款安全框架Shiro的设计相当精妙.S ...
- git操作命令行
前言 git操作各种软件五花八门,懒得研究,用最原始的方法敲命令行. 操作 1.网上下载git 网上百度一下好多直接下载就好 2.配置用户名邮箱 $ git config --global user. ...
- Python 中内建属性 __getattribute__
参考自:https://blog.csdn.net/yitiaodashu/article/details/78974596 __getattribute__是属性访问拦截器,就是当这个类的属性被访问 ...