原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ62.html

题解

太久没更博客了,该拯救我的博客了。

$$
\sum_{1\leq j \leq n} \gcd(i,j) ^{c-d} i^dj^dx_j = b_i\\
A_i = i^d x_i, B_i = \frac{b_i}{i^d}, f(x) = x^{c-d}\\
f(x) = \sum_{d|x} g(d) \\
\begin{eqnarray*}
\sum_{1\leq j \leq n} f(\gcd(i,j)) A_j&=&B_i\\
\sum_{1\leq j \leq n} \sum_{1\leq d \leq n} [d|i]\cdot[d|j]\cdot g(d) A_j&=&B_i\\
\sum_{1\leq d \leq n} [d|i]g(d) \sum_{1\leq j\leq n}[d|j]A_j &=& B_i\\
\sum_{1\leq d\leq n}[d|i]h(d) &=& B_i\\
\sum_{d|i} h(d)&=&B_i\\
(h(x) &=& g(x) \sum_{d|j} A_j)
\end{eqnarray*}
$$

于是只需要 2 次因数反演,1 次倍数反演,三次莫比乌斯反演就好了。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL read(){
LL x=0,f=1;
char ch=getchar();
while (!isdigit(ch)&&ch!='-')
ch=getchar();
if (ch=='-')
f=0,ch=getchar();
while (isdigit(ch))
x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return f?x:-x;
}
const int N=100005,mod=998244353;
void Del(int &x,int y){if ((x-=y)<0) x+=mod; }
void Add(int &x,int y){if ((x+=y)>=mod) x-=mod; }
int n,q,c,d;
int b[N],f[N],g[N],h[N],x[N];
int Pow(int x,int y){
if (y<0)
return Pow(x,y+mod-1);
int ans=1;
for (;y;y>>=1,x=(LL)x*x%mod)
if (y&1)
ans=(LL)ans*x%mod;
return ans;
}
void Mobius(int *f,int *g,int n,int flag){
for (int i=1;i<=n;i++)
g[i]=f[i];
if (flag==0)
for (int i=1;i<=n;i++)
for (int j=i<<1;j<=n;j+=i)
Del(g[j],g[i]);
else
for (int i=n;i>=1;i--)
for (int j=i<<1;j<=n;j+=i)
Del(g[i],g[j]);
}
void solve(){
for (int i=1;i<=n;i++)
b[i]=(LL)read()*Pow(i,mod-1-d)%mod;
Mobius(b,h,n,0);
for (int i=1;i<=n;i++)
if (g[i])
h[i]=(LL)h[i]*Pow(g[i],-1)%mod;
else if (h[i])
return (void)(puts("-1"));
Mobius(h,x,n,1);
for (int i=1;i<=n;i++)
x[i]=(LL)Pow(i,mod-1-d)*x[i]%mod;
for (int i=1;i<=n;i++)
printf("%d ",x[i]);
puts("");
}
int main(){
n=read(),c=read(),d=read(),q=read();
for (int i=1;i<=n;i++)
f[i]=Pow(i,c-d);
Mobius(f,g,n,0);
while (q--)
solve();
return 0;
}

  

UOJ#62. 【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. 「UR#5」怎样跑得更快

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

  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 应用的话,那么你就应该无所不用其极,让你的应用更快,异 ...

随机推荐

  1. git bash的命令

    git bash cd /f   该命令可以把当前目录切换到f盘 git clone git上的项目的url

  2. LVM初级配置

    步骤: 1.将物理硬盘转换成物理卷(PV) 创建PV:pvcreate /dev/vdb 2.将PV添加到卷组中(VG) vgcreate vg0 /dev/vdb 3.创建逻辑卷(LV)并从VG中调 ...

  3. HTML 页面meta标签

    1. 概述 1.1 说明 <meta>标签提供了HTML文档的元数据[元数据(Metadata)是数据的数据信息],即页面的元信息,元数据不会显示在客户端,但是会被浏览器解析.meta元素 ...

  4. 7)django-示例(cbv)

    CBV(class base view)一个url根据method方式调用相应的方法.method常用有get,post 如果是GET请求,Home类会调用get方法,如果是POST提交数据,则类会调 ...

  5. 饿了么vue-cli3.0+cube-ui笔记

    1.目录结构 模板文件是public里的index.html,运行项目的时候,会引用src/main.js(入口文件) 详细文档在这里:https://cli.vuejs.org/zh/config/ ...

  6. RemoveDuplicatesfromSortedList

    给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3-&g ...

  7. index_select ,clamp,detach

    1.torch.clamp(input,min,max,out=None)-> Tensor 将input中的元素限制在[min,max]范围内并返回一个Tensor 2.index_selec ...

  8. python之vscode中手动选择python解释器(mac)

    要选择特定的解释器,请从命令选项板(⇧⌘P)调用Python:Select Interpreter命令. 更详细请看:http://www.cnblogs.com/it-tsz/p/9312151.h ...

  9. 用json获取拉钩网的信息

    class LaoGo(object): def __init__(self): self.url="http://www.lagou.com/lbs/getAllCitySearchLab ...

  10. hishlib 算法加密

    通过hashlib MD5得到一个32的加密密码 import hashlib def getMD5(): md5 = hashlib.md5()  #调用MD5加密方法 with open(path ...