「UR#5」怎样跑得更快

这个您就会了

下面是复读机mangoyang

我们要求

\[\sum_{j=1}^n \gcd(i,j)^{c-d} j^d x_j=\frac{b_i}{i^d}
\]

随便设一下

\[\sum_{j=1}^n f(\gcd(i,j))h(j)=g(i) \\
\sum_{d|i}\sum_{j=1}^n [\gcd(i,j)=d]f(d)h(j)=g(i) \\
\sum_{d|i}\sum_{d|j}f_r(d)h(j)=g(i)
\]

这里用到了第一个莫比乌斯反演,已知 \(f(d)\) 求出 \(f_r(d)\)

记 \(f_z(d)=\sum_{j=1}^n [d|j]h(j)\)

\[\sum_{d|i} f_r(d)f_z(d)=g(i)
\]

这里用第二个莫比乌斯反演,已知 \(g(i)\) 求出 \(f_r(d)f_z(d)\) ,除一下可以得到 \(f_z(d)\) 。

最后用第三个莫比乌斯反演,已知 \(f_z(d)\) 求出 \(h(j)\) 即可。

code

/*program by mangoyang*/
#pragma GCC optimize("Ofast", "inline")
#include<bits/stdc++.h>
#define inf (0x3f3f3f3f)
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define Min(a, b) ((a) < (b) ? (a) : (b))
typedef long long ll;
using namespace std;
template <class T>
inline void read(T &x){
int ch = 0, f = 0; x = 0;
for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = 1;
for(; isdigit(ch); ch = getchar()) x = x * 10 + ch - 48;
if(f) x = -x;
}
const int N = 114514, mod = 998244353;
int a[N], b[N], inv1[N], inv2[N], n, q, c, d;
inline void up(int &x, int y){
x = x + y >= mod ? x + y - mod : x + y;
}
inline int Pow(int a, int b){
int ans = 1;
b = (b % (mod - 1) + mod - 1) % (mod - 1);
for(; b; b >>= 1, a = 1ll * a * a % mod)
if(b & 1) ans = 1ll * ans * a % mod;
return ans;
}
inline void gao1(int *a){
for(int i = 1; i <= n; i++)
for(int j = i + i; j <= n; j += i)
up(a[j], mod - a[i]);
}
inline void gao2(int *a){
for(int i = n; i >= 1; i--)
for(int j = i + i; j <= n; j += i)
up(a[i], mod - a[j]);
}
int main(){
read(n), read(c), read(d), read(q);
for(int i = 1; i <= n; i++)
inv1[i] = Pow(i, c - d);
for(int i = 1; i <= n; i++)
inv2[i] = Pow(i, -d);
gao1(inv1);
for(int i = 1; i <= n; i++)
inv1[i] = Pow(inv1[i], -1);
while(q--){
for(int i = 1; i <= n; i++){
read(b[i]);
b[i] = 1ll * b[i] * inv2[i] % mod;
}
gao1(b);
int flag = 0;
for(int i = 1; i <= n; i++)
if(!inv1[i] && b[i]){
flag = 1; break;
}
else b[i] = 1ll * b[i] * inv1[i] % mod;
if(flag){
puts("-1");
continue;
}
gao2(b);
for(int i = 1; i <= n; i++)
b[i] = 1ll * b[i] * inv2[i] % mod;
for(int i = 1; i <= n; i++)
printf("%d ", b[i]);
puts("");
}
return 0;
}

「UR#5」怎样跑得更快的更多相关文章

  1. 【UOJ#62】【UR #5】怎样跑得更快(莫比乌斯反演)

    [UOJ#62][UR #5]怎样跑得更快(莫比乌斯反演) 题面 UOJ 题解 众所周知,\(lcm(i,j)=\frac{ij}{gcd(i,j)}\),于是原式就变成了: \[\sum_{j=1} ...

  2. UOJ 【UR #5】怎样跑得更快

    [UOJ#62]怎样跑得更快 题面 这个题让人有高斯消元的冲动,但肯定是不行的. 这个题算是莫比乌斯反演的一个非常巧妙的应用(不看题解不会做). 套路1: 因为\(b(i)\)能表达成一系列\(x(i ...

  3. UOJ#62. 【UR #5】怎样跑得更快 数论 莫比乌斯反演

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ62.html 题解 太久没更博客了,该拯救我的博客了. $$\sum_{1\leq j \leq n} \ ...

  4. UOJ #62. 【UR #5】怎样跑得更快

    题目分析 显然不可能高斯消元. 考虑反演. \(b_i=\sum\limits_{j=1}^n\gcd(i,j)^C\cdot \text{lcm}(i,j)^D\cdot x_j\) \(b_i=\ ...

  5. 【UR #5】怎样跑得更快

    题目 给定\(n,c,d\)和序列\(\{b_i\}\),求一个序列\(\{x_i\}\)满足 \[\sum_{j=1}^n\gcd(i,j)^c\times \rm{lcm(i,j)^d}\time ...

  6. 面试官:如何写出让 CPU 跑得更快的代码?

    前言 代码都是由 CPU 跑起来的,我们代码写的好与坏就决定了 CPU 的执行效率,特别是在编写计算密集型的程序,更要注重 CPU 的执行效率,否则将会大大影响系统性能. CPU 内部嵌入了 CPU ...

  7. 「UR#5」怎样更有力气

    「UR#5」怎样更有力气 解题思路 考虑没有限制的情况,一定是把操作离线下来,按照边权从小到达做.可以发现,如果没有限制,完全图是多余的,直接拿树边进行合并就可以了.我们要做这么一件事情,把每个点属于 ...

  8. 「UR#6」懒癌

    「UR#6」懒癌 妈妈我居然看了六个小时题解,快救救乌干达的可怜儿童吧. 接下来开始膜官方题解: ​ 其实就算有上面两个结论也不是很好想到任意复杂度的做法,关键在于要想到一个人是怎么推断自己的狗是不是 ...

  9. 让DB2跑得更快——DB2内部解析与性能优化

    让DB2跑得更快——DB2内部解析与性能优化 (DB2数据库领域的精彩强音,DB2技巧精髓的热心分享,资深数据库专家牛新庄.干毅民.成孜论.唐志刚联袂推荐!)  洪烨著 2013年10月出版 定价:7 ...

随机推荐

  1. svn报错:[Previous operation has not finished; run 'cleanup' if it was interrupted] 的排错过程

    今天在打开某一文档的情况下,使用SVN更新文档,在更新的过程中报错,提示需要执行clean up,果断右键执行clean up,又提示一个新的错误:"Previous operation h ...

  2. 禁止tomcat的Catina.out的累计输出

    禁止tomcat的Catina.out的累计输出 1.设置 catina.sh的CATALINA_OUT=/dev/null

  3. opener和parent的区别

    openeropener用于在window.open的页面引用执行该window.open方法的的页面的对象.例如:A页面通过window.open()方法弹出了B页面,在B页面中就可以通过opene ...

  4. nodejs异常处理过程/获取nodejs异常类型/写一个eggjs异常处理中间件

    前言 今天想写一下eggjs的自定义异常处理中间件,在写的时候遇到了问题,这个错误我捕获不到类型?? 处理过程,不喜欢看过程的朋友请直接看解决方法和总结 看一下是什么: 抛出的异常是检验失败异常Val ...

  5. git推送本地分支到远程仓库并在远程仓库创建新分支

    $ git push <远程主机名> <本地分支名>:<远程分支名> git push master test:test #master 为设置的远程仓库别名,第一 ...

  6. HDFS部署测试记录(2019/05)

    目录 HDFS部署测试记录 0.HDFS基础知识 1.基本组成结构与文件访问过程 2.NameNode启动时如何维护元数据 3.HDFS文件上传流程 1.系统环境 1.安装大致记录: 2.磁盘分区 3 ...

  7. Error:A problem occurred configuring project ':networklibrary'. > No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android

    https://blog.csdn.net/dafeige8/article/details/87880998 https://blog.csdn.net/vocanicy/article/detai ...

  8. SQLServer查看及设置最大连接数(转)

    转自:https://blog.csdn.net/duanbeibei/article/details/86573840 很多时候自己本地开发会遇到 ,打开几个连接正常访问 之后就报错误,这时候需要调 ...

  9. 将旧版本jQuery升级到新版本的jQuery

    需要将项目中的旧版本jQuery升级到新版本的jQuery,为解决兼容性问题得下载一个js兼容包.例子:升级的项目中jQuery1.x到jquery3.x,需要一个jquery-migrate-3.1 ...

  10. Hive的两种操作模式

    Hive的客户端操作 Hive的客户端操作 通过JDBC操作Hive 通过Thrift操作Hive 通过JDBC操作Hive 首先 Hive 启动远程服务 hive --service hiveser ...