质因子拆贡献+朴素容斥:1007T3

news2024/10/2 6:40:10

http://cplusoj.com/d/senior/p/SS231007C

考虑枚举gcd,然后容斥,恰好转至少。 g g g 表示gcd恰好为 d d d f f f 表示至少为 d d d

显然有 f ( d ) = ∑ d ∣ n g ( n ) f(d)=\sum_{d|n}g(n) f(d)=dng(n),可以直接莫反成: g ( d ) = ∑ d ∣ n f ( n ) μ ( n d ) g(d)=\sum_{d|n}f(n)^{\mu( {\frac n d })} g(d)=dnf(n)μ(dn),但其实不用这么麻烦。从大往小处理 d d d,则

考虑如何计算 f f f,直接上拆贡献。枚举每个质因子。对于 d d d 我们可以直接计算。对于 p c p^c pc 的东西,我们要保证 在这里插入图片描述

直接算很麻烦。考虑容,然后发现不用容,直接恰好转至少后变差分就行了。

#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){int x=0,f=1;char ch=getchar(); while(ch<'0'||
ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;}
#define Z(x) (x)*(x)
#define pb push_back
//mt19937 rand(time(0));
//mt19937_64 rand(time(0));
//srand(time(0));
#define N 2000010
//#define M
#define mo 998244353
int pw(int a, int b) {
	int ans=1; 
	while(b) {
		if(b&1) ans*=a; 
		a*=a; b>>=1; 
		ans%=mo; a%=mo; 
	}
	return ans; 
}
int pw(int a, int b, int p) {
	int ans=1; 
	while(b) {
		if(b&1) ans*=a; 
		a*=a; b>>=1; 
		ans%=p; a%=p; 
	}
	return ans; 
}
int fac[N], inv[N], ifac[N]; 
void init(int n) {
	int i; 
	for(i=fac[0]=1; i<=n; ++i) fac[i]=fac[i-1]*i%mo; 
	ifac[n]=pw(fac[n], mo-2); 
	for(i=n-1; i>=0; --i) ifac[i]=ifac[i+1]*(i+1)%mo; 
    for(i=1; i<=n; ++i) inv[i]=ifac[i]*fac[i-1]%mo; 
}
int C(int n, int m) {
	if(m>n) return 0;
	return fac[n]*ifac[m]%mo*ifac[n-m]%mo; 
}
void Add(int &a, int b) {
	a+=b; if(a>=mo || a<=-mo) a%=mo; 
    if(a<0) a+=mo; 
}
void Mul(int &a, int b) {
	a*=b; if(a>=mo || a<=-mo) a%=mo; 
    if(a<0) a+=mo; 
}
void Mod(int &a) {
	if(a>=mo || a<=-mo) a%=mo; 
    if(a<0) a+=mo; 
}
void Mod(int &a, int p) {
	if(a>=p || a<=-p) a%=p; 
    if(a<0) a+=p; 
}
void Add(int &a, int b, int p) {
	a+=b; if(a>=p || a<=-p) a%=p; 
    if(a<0) a+=p; 
}
const int iv2=pw(2, mo-2); 
int b[N]; 
vector<int>z; 
void prim(int n) {
	memset(b, -1, sizeof(b)); b[1]=0;  
	for(int i=2; i<=n; ++i) {
		if(b[i]) z.pb(i); 
		for(int j : z) {
			if(i*j>n) break; 
			b[j*i]=0; if(i%j==0) break; 
		}
	}
}
int n, m, i, j, k, T;
int ans, lim, lstlim, d, D, g[N], f[N], c, p, P; 
int S[N], s[N]; 

signed main()
{
//	freopen("in.txt", "r", stdin);
//	freopen("out.txt", "w", stdout);
		freopen("number.in", "r", stdin);
	freopen("number.out", "w", stdout);
//	T=read();
//	while(T--) {
//
//	}
	n=read(); m=read(); init(2000000); 
	prim(2000000); 
	lstlim=0; ans=1; 
	for(d=m; d>=1; --d) {
		lim=m/d; 
//		if(lim==lstlim) {
//			f[d]=f[d+1]; g[d]=g[d+1];
//		}
//		else {
			f[d]=pw(d, pw(lim, n, mo-1)); 
			for(auto p : z) {
				if(p>lim) break; 
//				printf("%lld : \n", p); 
				for(c=0, P=1; P<=lim; P*=p, ++c) {
					S[c]=pw(lim-lim/(P*p), n, mo-1); 
//					printf("S %lld : %lld %lld\n", c, S[c], lim-lim/(P+1)); 
				}
				for(c=1, P=p; P<=lim; P*=p, ++c) {
					s[c]=S[c]-S[c-1]; Mod(s[c], mo-1); 
//					printf("s %lld : %lld\n", c, s[c]); 

					Mul(f[d], pw(P, s[c])); 
//					printf("%lld\n", f[d]); 
				}
			}
			g[d]=f[d]; 
			for(D=2*d; D<=m; D+=d) Mul(g[d], pw(g[D], mo-2)); 
//		}
//		lstlim=lim; 
//		printf("%lld : %lld %lld %lld\n", d, f[d], g[d], pw(g[d], d)); 
		Mul(ans, pw(g[d], d)); 
	}
	Mod(ans); 
	printf("%lld", ans); 
	return 0;
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1072266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[python 刷题] 76 Minimum Window Substring

[python 刷题] 76 Minimum Window Substring 题目&#xff1a; Given two strings s and t of lengths m and n respectively, return the minimum window substring of s such that every character in t (including duplicates) is included in the window. If there is no …

抖音品牌如何传播,达人投放规划

面对达人的强大带动和种草能力&#xff0c;没有哪个品牌能够坚定的说“不”。但是想要与达人合作&#xff0c;你真的准备好了吗&#xff0c;今天来分享下抖音品牌如何传播&#xff0c;达人投放规划&#xff01; 一、制定投放规划的前期准备 从规划到实施执行并不是一蹴而就的&a…

uniapp物理键/右滑多次退出应用,再次进入显示白屏的问题

复现方式&#xff1a;安卓多次使用物理返回键或右滑退出应用后&#xff0c; 再次进入有很大机率显示白屏。但是手动杀进程的方式不会出现白屏和后台驻留的方式也不会出现白屏 解决思路&#xff1a;利用后台驻留的方式进行假退出应用&#xff0c;把应用隐藏至后台&#xff0c;这…

【Java】Unsafe应用解析

目录 一.功能介绍 二.如何获取Unsafe对象 1.从getUnsafe静态方法获取 2.通过反射获取单例对象theUnsafe 三.Unsafe常用API操作 3.1.线程调度 3.1.1 多线程锁 3.1.2 多线程CAS操作 3.1.3 线程的挂起和恢复 3.2.内存屏障 3.3.内存管理 3.4.对象操作 3.5.运行时动态创…

2023年中国金属涂胶板行业供需分析:销量同比增长2.8%[图]

金属涂胶板是一种将金属板材表面进行涂覆处理的产品。它通常由金属基材&#xff08;如钢板、铝板&#xff09;和胶粘剂组成&#xff0c;胶粘剂可以是有机胶粘剂、聚合物胶粘剂或其他特殊胶粘剂。 金属涂胶板行业分类 资料来源&#xff1a;共研产业咨询&#xff08;共研网&…

引领创新浪潮:“Polygon探寻新技术、新治理、新代币的未来之路!“

熊市是用来建设的&#xff0c;Polygon Labs一直在利用这漫长的几个月来做到这一点。 Polygon 是最常用的区块链之一&#xff0c;每周约有 150 万用户&#xff0c;每天超过 230 万笔交易&#xff0c;以及数千个 DApp&#xff0c;Polygon 最近面临着日益激烈的竞争。虽然从交易数…

助力精彩亚运,杭州第19届亚运会重保工作圆满完成

10月8日&#xff0c;随着杭州第19届亚运会闭幕会结束&#xff0c;大道云行为期16天的重保工作圆满结束。杭州亚运会向大家呈现了真正的“科技与狠活”&#xff0c;数字火炬手、开幕式AR、数字烟花&#xff0c;令人震撼的科技让线上线下的观众真切体会到数实融合。首轮直播全媒体…

与客户携手共进|博睿数据客户最佳实践精选

博睿数据将在秋季发布新一代一体化智能可观测平台 Bonree ONE&#xff0c;轻盈、有序、精准&#xff0c;更好地帮助企业应对新技术带来的运维压力&#xff0c;更好地实现数字化转型。 2023年10月20日的Bonree ONE秋季产品发布会上&#xff0c;我们将邀请先进客户分享最佳实践经…

ASL集睿致远 MIPI转LVDS芯片 CS5518规格书 PIN to PIN替代GM8775C 工业级标准

CS5518可以PIN to PIN替代GM8775C,不需要更改线路,直接替换,CS5518成本比GM8775C要低,整体方案性价比高.CS5518主要实现将 MIPI DSI 转单/双通道 LVDS功能,MIPI 支持1/2/3/4 通道可选,支持 4Gbps 速率。LVDS 时钟频率154MHz&#xff0c;支持常见的1920*1080分辨率的屏&#xff…

性能监控-linux操作系统计数器

top&#xff1a;实时显示系统中各个进程的资源占用状况 top [选项] 交互式命令 基本视图内容解释 top命令&#xff1a; 第一行队列任务信息 第二行 进程任务信息可以看到运行、休眠、停止、僵死状态的进程个数 第三行&#xff1a;CPU状态信息 %Cpu(s): 0.5 us, 0.4 sy, 0.0…

MOS管各种概念(三个极、沟道、衬底、电流方向、箭头方向、耗尽型和增强型、寄生二极管、封装引脚)

三个极、沟道、衬底 D(Drain)漏极&#xff1a;载流子&#xff08;NMOS为负电荷&#xff0c;PMOS为正电荷&#xff09;离开端。 S(Source)源极&#xff1a;载流子发射端。 G(Gate)栅极&#xff1a;控制MOS开关的管脚。 沟道&#xff1a;D和S之间形成的导电通道。 衬底&#xff…

如何实现chatGPT批量问答,不用token

3分钟&#xff0c;教你做个GPT批量问答还不用token | 有源码 源码链接 解压压缩包&#xff1b;在Pycharm打开这个文件夹 执行 pip install undetected_chromedriver 和 pip install selenium 执行第1到63行代码&#xff0c;后台会自动打开浏览器&#xff0c;需要手动登录账…

全场景流量验证系统 | 京东物流技术团队

本文介绍了一种基于线上流量实现对重构系统进行功能和性能验证的实践方案。针对线上流量如何拦截、如何录制、如何存储、如何回放以及如何发压均作了详细说明&#xff0c;为具有类似需求的读者提供了一种可供参考的思路。 1 业务背景 随着百川项目的启动&#xff0c;中台需要…

XSS原理

原理&#xff1a; 这是一种将任意 Javascript 代码插入到其他Web用户页面里执行以达到攻击目的的漏洞。攻击者利用浏览器的动态展示数据功能&#xff0c;在HTML页面里嵌入恶意代码。当用户浏览改页时&#xff0c;这些潜入在HTML中的恶意代码会被执行&#xff0c;用户浏览器被攻…

串联起深度学习的整体,以及其他领域

1、从模型拟合&#xff08;收敛&#xff09;数据关系出发&#xff1a; 2、f从简单的一层和两层连接开始&#xff0c;发展&#xff1b;被表示成 3、如何判断收敛&#xff1a;,即目标函数 4、如何界定任务&#xff1a;&#xff0c;表示什么&#xff1f;表示什么&#xff1f;&a…

解决ubuntu中没有网络连接的图标

现象&#xff1a;Ubuntu连接网络 在设置中没有显示网络图标 解决方案&#xff1a; 命令为 sudo nmcli networking off sudo nmcli networking on sudo service network-manager restart 重启ubuntu&#xff0c;网络连接完成

[MongoDB]-权限验证管理

[MongoDB]-权限验证管理 senge | 2023年9月 背景说明&#xff1a;现有两套MongoDB副本集群给开发人员使用时未开启认证。 产生影响&#xff1a;用户若输入账号以及密码则会进行校验&#xff0c;但用户可以在不输入用户名和密码的情况下也可直接登录。 倘若黑客借此进行攻击勒索…

nSoftware IPWorks IoT 2022 Java 22.0.8 Crack

物联网库&#xff0c;使用这个轻量级组件库&#xff0c;可以在任何平台上的应用程序中轻松实现物联网 (IoT) 通信协议。 nSoftware IPWorks IoT 最新的 IPWorks IoT 现已推出&#xff01;最新版本的 IPWorks IoT 具有现代化和简化的体验&#xff0c;包括 .NET 中的异步和跨平台…

LeetCode竞赛---第 366 场周赛

Problem: 100103. 分类求和并作差 &#x1f4da; 题目&#xff1a;给你两个正整数 n 和 m 。 现定义两个整数 num1 和 num2 &#xff0c;如下所示&#xff1a; num1&#xff1a;范围 [1, n] 内所有 无法被 m 整除 的整数之和。num1&#xff1a;范围 [1, n] 内所有 无法被 m 整…

OPPO realme 真我 一加 刷机工具下载 ColorOS Upgrade Tool

Download Realme Upgrade Tool for Windows Download ColorOS Upgrade Tool for Windows Realme升级工具是由Realme开发的Windows应用程序&#xff0c;可帮助用户升级其Realme设备上的固件。此工具支持在Realme Ul 3.0或更高版本上运行的Realme 设备。OPPO realme 真我 一加 …