以下用等号代替同余

这个式子是$\sum\limits_{j=1}^n(i,j)^{c-d}i^dj^dx_j=b_i$

令$g(n)=\sum\limits_{e|n}\mu\left(\frac ne\right)e^{c-d}$,那么原式变为$\sum\limits_{e|i}g(e)\sum\limits_{\substack{e|j\\1\leq j\leq n}}j^dx_j=\frac{b_i}{i^d}$

令$z_e=\sum\limits_{\substack{e|j\\1\leq j\leq n}}j^dx_j$,先处理原式

$\sum\limits_{e|i}g(e)z_e=\frac{b_i}{i^d}\Leftrightarrow g(i)z_i=\sum\limits_{e|i}\mu\left(\frac ie\right)\frac{b_e}{e^d}$

$g(i)$和上式右边都可以$O(n\log n)$预处理,此时如果存在$i$使$g(i)=0$且右边$\ne0$那么无解,两个都是$0$就多解,随便给$z_i$赋值即可

最后求$x_i$:$x_ii^d=\sum\limits_{\substack{i|j\\1\leq j\leq n}}\mu\left(\frac ji\right)z_j$

正如vfk的题解所说:三个莫比乌斯反演掷地有声==

写快速幂时要注意负指数的处理...

#include<stdio.h>
#include<string.h>
char s[4000000];
int ns;
#define NUM(x) ('0'<=x&&x<='9')
inline int rd(){
	while(!NUM(s[ns]))ns++;
	int x=0;
	while(NUM(s[ns]))x=x*10+s[ns++]-'0';
	return x;
}
typedef long long ll;
const int mod=998244353,T=100000;
int mul(int a,int b){return(ll)a*b%mod;}
void inc(int&a,int b){(a+=b)%=mod;}
int pow(int a,int b){
	int s=1;
	while(b<0)b+=mod-1;
	while(b){
		if(b&1)s=mul(s,a);
		a=mul(a,a);
		b>>=1;
	}
	return s;
}
int pr[T+10],mu[T+10],nd[T+10],d;
bool np[T+10];
void sieve(){
	int i,j,M=0;
	mu[1]=1;
	nd[1]=1;
	for(i=2;i<=T;i++){
		if(!np[i]){
			pr[++M]=i;
			mu[i]=-1;
			nd[i]=pow(i,-d);
		}
		for(j=1;j<=M&&i*pr[j]<=T;j++){
			np[i*pr[j]]=1;
			nd[i*pr[j]]=mul(nd[i],nd[pr[j]]);
			if(i%pr[j]==0)break;
			mu[i*pr[j]]=-mu[i];
		}
	}
}
int b[T+10],g[T+10],h[T+10],n,c;
int main(){
	fread(s,1,4000000,stdin);
	int q,i,j,t;
	n=rd();
	c=rd();
	d=rd();
	q=rd();
	sieve();
	for(i=1;i<=n;i++){
		t=pow(i,c-d);
		for(j=1;i*j<=n;j++)inc(g[i*j],mu[j]*t);
	}
	for(i=1;i<=n;i++)g[i]=pow(g[i],mod-2);
	while(q--){
		for(i=1;i<=n;i++)b[i]=mul(rd(),nd[i]);
		memset(h,0,sizeof(h));
		for(i=1;i<=n;i++){
			t=b[i];
			for(j=1;i*j<=n;j++){
				if(mu[j])inc(h[i*j],mu[j]*t);
			}
		}
		for(i=1;i<=n;i++){
			if(g[i]==0&&h[i]!=0){
				i=-1;
				break;
			}
			h[i]=mul(h[i],g[i]);
		}
		if(i==-1){
			puts("-1");
			continue;
		}
		for(i=1;i<=n;i++){
			t=0;
			for(j=1;i*j<=n;j++)inc(t,mu[j]*h[i*j]);
			t=mul(nd[i],t);
			inc(t,mod);
			printf("%d ",t);
		}
		putchar('\n');
	}
}

[UOJ62]怎样跑得更快的更多相关文章

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

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

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

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

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

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

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

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

  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. 2008 APAC local onsites C Millionaire (动态规划,离散化思想)

    Problem You have been invited to the popular TV show "Would you like to be a millionaire?" ...

  2. bzoj 1050 并查集

    先按边长排序,假设s与t连通,那么我们可以枚举s与t的路径中最短的一条边,通过类似与kruskal的方法找到s与t的路径在当前最小边权情况下尽量小的最大边权,用这个比值更新答案. 特别的,我们对于某一 ...

  3. bootstrap-table设置某列序号自增

    col = [{ field: 'SerialNumber', title: '序号', formatter: function (value, row, index) { return index+ ...

  4. metlnfo 5.3.1 sql注入复现

    首先还是要说的是metlnfo是伪全局变量机制 所以如下: /admin/include/global.func.php function save_met_cookie(){ global $met ...

  5. linux中断线程化分析【转】

    转自:http://blog.csdn.net/qq405180763/article/details/24120895 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近在为3.8版本的Li ...

  6. Git 常用命令速查表(图文+表格)【转】

    转自:http://www.jb51.net/article/55442.htm 一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git comm ...

  7. HDU 5117 Fluorescent

    题目链接:HDU-5117 题意为有n盏灯,m个开关,每个开关控制着\( k_{i} \)灯.X为最后亮着的灯的个数,要求出\( E(X^{3} ) * 2^{M} mod (10^9 + 7) \) ...

  8. iOS 适配/ autoLayout基本知识

    历史 iPhone3GS.iPhone4\4s:没有屏幕适配最早开发里面的程序全部都是写死的 iPad 旋转出来之后 Autoresizing问世iPhone5\5c\5s兼容各种不同的情况 系统适配 ...

  9. centos7.4关闭防火前

    systemctl stop firewalld.service #停止firewallsystemctl disable firewalld.service #禁止firewall开机启动firew ...

  10. NOIP 2010

    tags: NOIP 并查集 动态规划 搜索 categories: 信息学竞赛 总结 机器翻译 乌龟棋 关押罪犯 引水入城 机器翻译 Solution 维护一个队列, 每次从词典中查词时将单词加入队 ...