LG P4449 & JZOJ 于神之怒
\(\text{Problem}\)
JZOJ上,求
\]
对 \(10^9+7\) 取模
\(n,m,k \le 5 \times 10^6\)
LG 上,是一个加强版,有 \(T(T\le 2 \times 10^3)\) 组数据
\(\text{Analysis}\)
依照套路的方法,我们可以推出
\]
若只有一组数据,那么
数论分块套数论分块 \(O(n^{\frac{3}{4}})\) 即可
加上线筛 \(O(n)\)
\(\text{Code}\)
#include<cstdio>
#include<iostream>
#define LL long long
#define re register
using namespace std;
const int N = 5e6, P = 1e9 + 7;
int n, m, k, totp, pr[N], vis[N + 5], sum[N + 5], pk[N + 5];
inline int fpow(LL x, LL y)
{
LL res = 1;
for(; y; y >>= 1)
{
if (y & 1) res = res * x % P;
x = x * x % P;
}
return res;
}
inline void Euler()
{
vis[1] = sum[1] = pk[1] = 1;
for(re int i = 2; i <= N; i++)
{
if (!vis[i]) pr[++totp] = i, sum[i] = -1, pk[i] = fpow(i, k);
for(re int j = 1; j <= totp && i * pr[j] <= N; j++)
{
vis[i * pr[j]] = 1, pk[i * pr[j]] = (LL)pk[i] * pk[pr[j]] % P;
if (!(i % pr[j])) break;
sum[i * pr[j]] = -sum[i];
}
}
for(re int i = 1; i <= N; i++) sum[i] += sum[i - 1], pk[i] = (pk[i] + pk[i - 1]) % P;
}
inline int F(int n, int m)
{
LL res = 0;
for(re int l = 1, r; l <= min(n, m); l = r + 1)
{
r = min(n / (n / l), m / (m / l));
res = (res + (LL)(sum[r] - sum[l - 1] + P) * (n / l) % P * (m / l)) % P;
}
return res;
}
int main()
{
scanf("%d%d%d", &n, &m, &k);
Euler();
LL ans = 0;
for(re int l = 1, r; l <= min(n, m); l = r + 1)
{
r = min(n / (n / l), m / (m / l));
ans = (ans + (LL)(pk[r] - pk[l - 1] + P) * F(n / l, m / l) % P) % P;
}
printf("%lld\n", ans);
}
但LG上有多组数据,显然太慢了
同样套路地 \(T=pd\)
然后这个式子成了
\]
\(g(d)=d^k\) 显然是个积性函数,然后 \(G=g * mu\) 也是个积性函数
于是我们考虑线筛预处理 \(G\),然后数论分快做到单次 \(O(\sqrt n)\)
根据积性函数性质有 \(G(d) = \prod_{i=1} G({p_i}^{c_i})\)
然后我们思考什么样的数有贡献
\]
因为 \(\mu\) 的性质,我们知道,只有当 \(j=0\) 或 \(j=1\) 时有贡献,于是有
G(n)
&= \prod_{i=1} \mu(1) {p_i}^{c_i k} + \mu(p_i) {p_i}^{(c_i-1)k} \\
&= \prod_{i=1} {p_i}^{c_i k} - {p_i}^{(c_i-1)k} \\
&= \prod_{i=1} {p_i}^{(c_i-1) k}({p_i}^k-1)
\end{aligned}
\]
当 \(c_i = 1\) 的时候,就是质数的时候,\(G(p)=p^k-1\)
因为 \(G\) 是积性函数,所以 \(G(ab)=G(a)G(b)(\gcd(a,b)=1)\)
若 \(a,b\) 不互质,因为在线筛时枚举质数,所以 \(b\in \mathbb P\),设 \(a = a' p^c(\gcd(a,a')=1)\)
那么 \(G(ab)=G(a')G(p^{c+1})=G(a')p^{ck}(p^k-1)\)
线筛过程中 \(p^{(c-1)k}(p^k-1)\) 已计入 \(G(ab)\) 中,所以本次再乘上 \(p^k\) 即可
综上
\begin{cases}
G(a)G(b) & \gcd(a,b)=1 \\
G(a)b^k & \gcd(a,b)>1
\end{cases}
\]
线筛即可完美处理
\(\text{Code}\)
#include<cstdio>
#include<iostream>
#define LL long long
#define re register
using namespace std;
const int N = 5e6, P = 1e9 + 7;
int n, m, k, totp, pr[N], vis[N + 5], pk[N + 5];
LL sum[N + 5];
inline int fpow(LL x, LL y)
{
LL res = 1;
for(; y; y >>= 1)
{
if (y & 1) res = res * x % P;
x = x * x % P;
}
return res;
}
inline void Euler()
{
vis[1] = sum[1] = pk[1] = 1;
for(re int i = 2; i <= N; i++)
{
if (!vis[i]) pr[++totp] = i, pk[i] = fpow(i, k), sum[i] = (pk[i] - 1 + P) % P;
for(re int j = 1; j <= totp && i * pr[j] <= N; j++)
{
vis[i * pr[j]] = 1, pk[i * pr[j]] = (LL)pk[i] * pk[pr[j]] % P;
if (i % pr[j]) sum[i * pr[j]] = sum[i] * sum[pr[j]] % P;
else{sum[i * pr[j]] = sum[i] * pk[pr[j]] % P; break;}
}
}
for(re int i = 1; i <= N; i++) sum[i] = (sum[i] + sum[i - 1]) % P;
}
int main()
{
int T; scanf("%d%d", &T, &k);
Euler();
for(; T; T--)
{
scanf("%d%d", &n, &m);
LL ans = 0;
for(re int l = 1, r; l <= min(n, m); l = r + 1)
{
r = min(n / (n / l), m / (m / l));
ans = (ans + (sum[r] - sum[l - 1] + P) * (n / l) % P * (m / l)) % P;
}
printf("%lld\n", ans);
}
}
LG P4449 & JZOJ 于神之怒的更多相关文章
- Solution -「洛谷 P4449」于神之怒加强版
\(\mathcal{Description}\) Link. 给定 \(k\) 和 \(T\) 组 \(n,m\),对于每组,求 \[\sum_{i=1}^n\sum_{j=1}^m\ope ...
- P4449 于神之怒加强版 (莫比乌斯反演)
[题目链接] https://www.luogu.org/problemnew/show/P4449 给定n,m,k,计算 \(\sum_{i=1}^n \sum_{j=1}^m \mathrm{gc ...
- 洛谷 - P4449 - 于神之怒加强版 - 莫比乌斯反演
https://www.luogu.org/problemnew/show/P4449 \(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{i=1}^{m} gcd(i, ...
- P4449 于神之怒加强版
\(\color{#0066ff}{ 题目描述 }\) 给定n,m,k,计算 \(\sum_{i=1}^n \sum_{j=1}^m \mathrm{gcd}(i,j)^k\) 对1000000007 ...
- 并不对劲的p4449于神之怒加强版
题目大意 给定\(t,k(t\leq2000,k\leq5*10^6)\) \(t\)组询问,每组给出\(n,m(n,m\leq5*10^6)\)求$\sum_{i=1}^n \sum_{j=1}^m ...
- 题解 P4449 于神之怒加强版
这道题算是我完完整整推的第一道题,写篇题解纪念一下. 题目 废话不多说,直接开始推式子(给新手准备,过程较详细,大佬可自行跳步),以下过程中均假设 \((n\le m)\),\([d=1]\) 类似于 ...
- [jzoj 6087] [GDOI2019模拟2019.3.26] 获取名额 解题报告 (泰勒展开+RMQ+精度)
题目链接: https://jzoj.net/senior/#main/show/6087 题目: 题解: 只需要统计$\prod_{i=l}^r (1-\frac{a_i}{x})$ =$exp(\ ...
- Linux下安装性能测试负载机LG
系统:CentOS release 6.6 (Final) x86_64 安装包: 1.LRLG_00031.iso [Load Generator Standalone (Linux 64-bit ...
- bootstrap 之 xs,sm,md,lg && 主要颜色
mobile – xs ( <768px ) tablet – sm ( 768~991px ) desktop – md ( 992~1170px ) large desktop – lg ( ...
- 【BZOJ-4407】于神之怒加强版 莫比乌斯反演 + 线性筛
4407: 于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 241 Solved: 119[Submit][Status][Discu ...
随机推荐
- 一个简单的工具开发:从学生端更新程序部署工具说起,浅谈qt中自定义控件制作和调用、TCP协议下文件的收发 、以及可执行文件的打包
一个简单的工具开发:从学生端更新程序部署工具说起,浅谈qt中ui的使用和TCP协议下文件的收发.以及可执行文件的打包 写在前面,Qt Designer是一个非常操蛋的页面编辑器,它非常的...怎么说呢 ...
- 构建SpringCloud网关服务
搭建网关 导入maven包: <!--网关依赖--> <dependency> <groupId>org.springframework.cloud</gro ...
- 用Echarts实现SpreadJS引用从属关系可视化
在金融行业,我们经常会有审计审查的需求,对某个计算结果进行审查,但是这个计算结果可能依赖多个单元格,而且会有会有多级依赖的情况,如果让我们的从业人员靠眼睛找,工作量巨大,而且准确性存疑,基本上死路一条 ...
- Javaweb后端学习笔记
C/S结构与B/S结构: 1.C/S(Client/Server)结构:适用于个人娱乐市场[QQ等] (1).优点:安全性高.且有效降低服务器压力: (2).不足:增加服务成本.更新较繁琐: 2.B/ ...
- CVE-2022-26923 Windows域提权漏洞
前言 Active Directory 域服务,是一种目录服务,提供了存储目录数据信息以及用户相关的一些密码,电话号码等等一些数据信息,且可让用户和管理员使用这些数据,有利于域管理员对用户的数据信息进 ...
- [OpenCV实战]51 基于OpenCV实现图像极坐标变换与逆变换
在图像处理领域中,经常通过极坐标与笛卡尔直角坐标的互转来实现图像中圆形转为方形,或者通过极坐标反变换实现方形转圆形.例如钟表的表盘,人眼虹膜,医学血管断层都需要用到极坐标变换来实现圆转方. 文章目录 ...
- [Leetcode]环形链表 II
题目 代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * Li ...
- 51NOD5213A 【提高组/高分-省选预科 第一场【M】】序列
小 Y 酷爱的接龙游戏正是这样.玩腻了成语接龙之后,小 Y 决定尝试无平方因子二元合数接龙,规则如下: 现有 \(n\) 个不超过 \(K\) 的合数,每个合数 \(a\) 均可表示为 \(a=pq( ...
- Blazor Pdf Reader PDF阅读器 组件 更新
Blazor Pdf Reader PDF阅读器 组件 https://www.nuget.org/packages/BootstrapBlazor.PdfReader#readme-body-tab ...
- Flutter框架渲染流程与使用
Flutter简述 Flutter是一个UI SDK, 可以进行移动端(iOS, Android),Web端, 桌面,它是一个跨平台解决方法. Flutter的特点:美观,快速,高效,开放. 美观:F ...