题目

给定\(n,c,d\)和序列\(\{b_i\}\),求一个序列\(\{x_i\}\)满足

\[\sum_{j=1}^n\gcd(i,j)^c\times \rm{lcm(i,j)^d}\times x_j\equiv b_i(mod\ P )
\]

不难将\(\rm lcm(i,j)\)写成\(\frac{i\times j}{\gcd(i,j)}\)

\[\sum_{j=1}^n\gcd(i,j)^{c-d}j^dx_j\equiv b_i\times i^{-d}(mod\ P)
\]

套路枚举\(\gcd\),之后套路反演一下,设\(\omega =c-d\)

\[\sum_{d|i}d^{\omega}\sum_{d|k}[k|i]\mu(\frac{k}{d})F(k)\equiv b_i\times i^{-d}(mod\ P)
\]

其中\(F(k)=\sum_{k|t}x_tt^d\)

套路地进行简单和式变换

\[\sum_{k|i}F(k)\sum_{d|k}\mu(\frac{k}{d})d^{\omega}\equiv b_i\times i^{-d}(mod\ P)
\]

设\(g(n)=\sum_{d|n}\mu(\frac{n}{d})d^{\omega}\)

上式即为

\[\sum_{k|i}F(k)g(k)\equiv b_i\times i^{-d}(mod\ P)
\]

不难发现就是一个函数叫做\(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)\)复杂度了

显然我懒得写

代码

  1. #include<bits/stdc++.h>
  2. #define re register
  3. const int maxn=1e5+5;
  4. const int mod=998244353;
  5. inline int dqm(int x){return x<0?x+mod:x;}
  6. inline int qm(int x) {return x>=mod?x-mod:x;}
  7. inline int read() {
  8. char c=getchar();int x=0;while(c<'0'||c>'9')c=getchar();
  9. while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
  10. }
  11. int f[maxn],p[maxn>>1],b[maxn],g[maxn],n,c,d;
  12. inline int ksm(int a,int b) {
  13. b%=(mod-1);if(b<0) b+=mod-1;
  14. int S=1;for(;b;b>>=1,a=1ll*a*a%mod) if(b&1) S=1ll*S*a%mod;return S;
  15. }
  16. inline void work() {
  17. for(re int i=1;i<=n;i++) b[i]=1ll*read()*ksm(i,-d)%mod;
  18. for(re int i=1;i<=p[0];++i)
  19. for(re int j=n/p[i];j;--j) b[j*p[i]]=dqm(b[j*p[i]]-b[j]);
  20. for(re int i=1;i<=n;i++)
  21. if(g[i]==0&&b[i]) {puts("-1");return;}else b[i]=1ll*b[i]*g[i]%mod;
  22. for(re int i=1;i<=p[0];++i)
  23. for(re int T=n/p[i],j=1;j<=T;++j) b[j]=dqm(b[j]-b[p[i]*j]);
  24. for(re int i=1;i<=n;i++) printf("%d ",1ll*b[i]*ksm(i,-d)%mod);
  25. puts("");
  26. }
  27. int main() {
  28. n=read(),c=read(),d=read();c%=(mod-1),d%=(mod-1);
  29. for(re int i=2;i<=n;i++) {
  30. if(!f[i]) p[++p[0]]=i;
  31. for(re int j=1;j<=p[0]&&p[j]*i<=n;++j) {
  32. f[p[j]*i]=1;if(i%p[j]==0)break;
  33. }
  34. }
  35. for(re int i=1;i<=n;i++) g[i]=ksm(i,c-d);
  36. for(re int i=p[0];i;--i)
  37. for(re int j=n/p[i];j;--j) g[p[i]*j]=dqm(g[p[i]*j]-g[j]);
  38. for(re int i=1;i<=n;i++) g[i]=ksm(g[i],mod-2);
  39. for(re int Q=read();Q;--Q) work();return 0;
  40. }

【UR #5】怎样跑得更快的更多相关文章

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

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

  2. 「UR#5」怎样跑得更快

    「UR#5」怎样跑得更快 膜这个您就会了 下面是复读机mangoyang 我们要求 \[ \sum_{j=1}^n \gcd(i,j)^{c-d} j^d x_j=\frac{b_i}{i^d} \] ...

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

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

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

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

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

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

  6. [翻译] 5点建议,让iOS程序跑得更快

      [文章原地址]http://mobile.tutsplus.com/tutorials/iphone/ios-quick-tip-5-tips-to-increase-app-performanc ...

  7. 让你的 Node.js 应用跑得更快的 10 个技巧(转)

    Node.js 受益于它的事件驱动和异步的特征,已经很快了.但是,在现代网络中只是快是不行的.如果你打算用 Node.js 开发你的下一个Web 应用的话,那么你就应该无所不用其极,让你的应用更快,异 ...

  8. 安装好Windows 8后必做的几件事情,让你的Win8跑的更快更流畅。

    1.关闭家庭组,因为这功能会导致硬盘和CPU处于高负荷状态. 关闭方法:Win+C-设置-更改电脑设置-家庭组-离开 如果用不到家庭组可以直接把家庭组服务也给关闭了:控制面板-管理工具-服务-Home ...

  9. 让你的 Node.js 应用跑得更快的 10 个技巧

    Node.js 受益于它的事件驱动和异步的特征,已经很快了.但是,在现代网络中只是快是不行的.如果你打算用 Node.js 开发你的下一个Web 应用的话,那么你就应该无所不用其极,让你的应用更快,异 ...

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

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

随机推荐

  1. JSON:结构化数据格式

    JSON是javascript的子类,也是作为更好的互联网传输结构化数据格式逐渐取代XML,因此要理解JSON,重要的是理解它是一种数据格式,不是一种编程语言. 语法 //javascript var ...

  2. jquery遍历获取带checkbox表格的选中值以及遍历json数组

    今天整理了一下jquery遍历的两个用法,分享给大家. 1.$().each 主要用来遍历DOM元素,获取DOM的值或样式等. 2.$.each() 主要用来遍历后台ajax返回的json数组,循环将 ...

  3. 记录使用node启用微信公众平台服务器配置

    在微信公众平台的基本信息里面的,修改服务器配置后会有下面的界面. EncodingAESKey是随机生成的,加密方式根据需要自己选择. 关于URL和Token: URL:填写之后会向这个URL发送一个 ...

  4. 系统INIT 启动脚本的结构/etc/rc.d/init.d/*

  5. mysql的一些基本常识

    1.主键的选取 主键的字段不能有null存在 主键应该使用bigint自增,而不是int 主键的选取默认为id 联合主键:就是多个字段被设置为主键,这里主键字段的值是允许相同的,只要不是所有字段相同即 ...

  6. Mysql--08 存储引擎

    目录 一.存储引擎简介 二.MySQL自带的存储引擎类型 三.真实企业案例 四.Innodb存储引擎--表空间介绍 一.存储引擎简介  1.文件系统: 1.1 操作系统组织和存取数据的一种机制. 1 ...

  7. spring中引入多个quertz 注意事项

    每一个独立的调取任务 需起不同的名字,否则只有最后一个调度起作用其他不起作用

  8. mysql,分组后,再次进行过滤

    查出平均分大于80以上的班级 select class_id, avg(score) from students group by class_id having avg(score)>80;  ...

  9. C#高级编程笔记 (6至10章节)运算符/委托/字符/正则/集合

    数学的复习,4^-2即是1/4/4的意思, 4^2是1*2*2的意思,而10^-2为0.01! 7.2运算符 符号 说明 例   ++ 操作数加1 int i=3; j=i++; 运算后i的值为4,j ...

  10. html中 的method=post和method=get的区别

    1. get是从服务器上获取数据,post是向服务器传送数据. 2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过 ...