@hdu - 6428@ Problem C. Calculate
@description@
给定 A, B, C,求:
\]
Input
第一行给定一个整数 T,描述数据组数。
接下来每组数据包含三个整数 A, B, C,含义如上。
1 ≤ T ≤ 10, 0 < A, B, C ≤ 10^7
Output
对于每组数据,输出答案 mod 2^30。
Sample Input
4
96 93 95
970 906 893
92460 95043 54245
9760979 8053227 7156842
Sample Output
1114536
28070648
388873924
623507672
@solution@
套路反演一波:
\]
注意到其实 \((\sum_{i=1}^{A}[p|i]) = \lfloor\frac{A}{p}\rfloor\),是比较好求解的,但是另外两项不能直接这么类比着做。
考虑从唯一分解式的角度去理解。令 \(p = \prod_{i=0}a_i^{b_i}, j = \prod_{i=0}a_i^{c_i}\)。
如果 \(p|j^2\),则有 \(b_i \le 2c_i\),于是 \(\lceil\frac{b_i}{2}\rceil \le c_i\)。
我们令 \(f[p] = \prod_{i=0}a_i^{\lceil\frac{b_i}{2}\rceil}\),则条件等价转为 \(f[p]|j\)。类比得到 \(g[p]\) 的定义以及 \(g[p]|k\)。
所以答案式变为:
\]
那么怎么快速求 f[p] 或 g[p] 呢?可以发现 \(f[p] = \prod_{i=0}f[a_i^{b_i}]\),也就是说它是积性函数。
所以我们就使用线性筛任意积性函数的技巧即可。这里有一个可以参考的连接。
我实现上跟那个博客写得不大一样(不过思想是一致的嗯嗯)。
然后我们考虑 \(\sum_{d=1}\phi(d)*\mu(\frac{p}{d})\),发现它是两个积性函数的狄利克雷卷积,而众所周知这也是个积性函数。
然后就可以愉快地再次任意函数线性筛一波。
最后枚举 p 算答案。时间复杂度 O(n)。
@accepted code@
#include<cstdio>
const int MOD = (1<<30) - 1;
const int MAXN = int(1E7);
inline int mul(int a, int b) {return (1LL*a*b)&MOD;}
int prm[MAXN + 5], pcnt = 0;
int low[MAXN + 5], f[MAXN + 5], g[MAXN + 5], h[MAXN + 5];
void sieve() {
low[1] = f[1] = g[1] = h[1] = 1;
for(int i=2;i<=MAXN;i++) {
if( !low[i] ) {
low[i] = i, prm[++pcnt] = i;
f[i] = i - 2, g[i] = h[i] = i;
long long p = 1LL*i*i;
for(int j=2;p<=MAXN;p*=i,j++) {
low[p] = p;
f[p] = p/i/i*(i-1)*(i-1);
g[p] = g[p/i];
if( (j-1) % 2 == 0 ) g[p] *= i;
h[p] = h[p/i];
if( (j-1) % 3 == 0 ) h[p] *= i;
}
}
for(int j=1;1LL*i*prm[j]<=MAXN;j++) {
if( i % prm[j] == 0 ) {
if( i != low[i] ) {
low[i*prm[j]] = low[i]*prm[j];
f[i*prm[j]] = f[i/low[i]]*f[prm[j]*low[i]];
g[i*prm[j]] = g[i/low[i]]*g[prm[j]*low[i]];
h[i*prm[j]] = h[i/low[i]]*h[prm[j]*low[i]];
}
break;
}
else {
low[i*prm[j]] = prm[j];
f[i*prm[j]] = f[i]*f[prm[j]];
g[i*prm[j]] = g[i]*g[prm[j]];
h[i*prm[j]] = h[i]*h[prm[j]];
}
}
}
}
void solve() {
int A, B, C, ans = 0; scanf("%d%d%d", &A, &B, &C);
for(int i=1;i<=A;i++)
ans = (1LL*ans + 1LL*mul(mul(f[i], A/i), mul(B/g[i], C/h[i])))&MOD;
printf("%d\n", ans);
}
int main() {
sieve();
int T; scanf("%d", &T);
for(int i=1;i<=T;i++) solve();
}
@details@
因为是对 2^30 取模,所以可以用位运算加速(虽然我不知道能加到多快,不过应该挺快的)。
@hdu - 6428@ Problem C. Calculate的更多相关文章
- HDU 6343.Problem L. Graph Theory Homework-数学 (2018 Multi-University Training Contest 4 1012)
6343.Problem L. Graph Theory Homework 官方题解: 一篇写的很好的博客: HDU 6343 - Problem L. Graph Theory Homework - ...
- 【HDU 6428】Calculate 莫比乌斯反演+线性筛
题解 代码 #include <bits/stdc++.h> using namespace std; typedef long long ll; const ll mod = 1LL&l ...
- HDU 6343 - Problem L. Graph Theory Homework - [(伪装成图论题的)简单数学题]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6343 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...
- HDU 6430 Problem E. TeaTree(虚树)
Problem E. TeaTree Problem Description Recently, TeaTree acquire new knoledge gcd (Greatest Common D ...
- hdu String Problem(最小表示法入门题)
hdu 3374 String Problem 最小表示法 view code#include <iostream> #include <cstdio> #include &l ...
- HDU 5687 Problem C 【字典树删除】
传..传送:http://acm.hdu.edu.cn/showproblem.php?pid=5687 Problem C Time Limit: 2000/1000 MS (Java/Others ...
- HDU 6342.Problem K. Expression in Memories-模拟-巴科斯范式填充 (2018 Multi-University Training Contest 4 1011)
6342.Problem K. Expression in Memories 这个题就是把?变成其他的使得多项式成立并且没有前导零 官方题解: 没意思,好想咸鱼,直接贴一篇别人的博客,写的很好,比我的 ...
- HDU 6336.Problem E. Matrix from Arrays-子矩阵求和+规律+二维前缀和 (2018 Multi-University Training Contest 4 1005)
6336.Problem E. Matrix from Arrays 不想解释了,直接官方题解: 队友写了博客,我是水的他的代码 ------>HDU 6336 子矩阵求和 至于为什么是4倍的, ...
- HDU 5687 Problem C(Trie+坑)
Problem C Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Tota ...
随机推荐
- jnhs-netbeans maven Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.4.1:clean (default-clean) on project
w 无法完成清理 出现这种错误,通常是由于启动了另一个tomcat 进程或者运行的javaw.exe进程,导致报错. 直接运行工程启动后再清理就好了 或者 重启大法
- python中os模块简介
一.什么是os模块 os模块提供了多数操作系统的功能接口函数.当os模块被导入后,它会自适应于不同的操作系统平台,根据不同的平台进行相应的操作,在python编程时,经常和文件.目录打交道,所以离不了 ...
- 使用php实现单点登录
1.准备两个虚拟域名 127.0.0.1 www.openpoor.com 127.0.0.1 www.myspace.com 2.在openpoor的根目录下创建以下文件 index.PHP [ ...
- Katalon系列二十:读写Excle
import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook Fil ...
- web服务器与tomcat
web服务器与tomcat 服务器分类: 硬件服务器和软件服务器 web服务器: 提供资源供别人访问 web: 网页的意思,资源. web资源分类: 动态的web资源:内容有可能发生改变的 静态的we ...
- 使MySQL支持emoji
1. 修改数据库的字符集 和 排序规则为: ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode ...
- PHPCMS V9双语站建设切换
PHPCMS V9要做双语,很多同学都是迷茫的,在此特地分享我的双语制作步辶 我这种模式是把两个站点都改为HTML静态模式才可以实现 双语切换可分为两种模式: 1.解析二级域名来切换双语 解析二级域名 ...
- Windows10 +Ubuntu 18.04双系统安装详细教程
前言: 由于开发需要,很多用户需要安装Linux环境.如果用虚拟机操作会消耗大量内存,一般的电脑会显得卡顿,从而影响开发效率.这里分享一些安装经验,希望能够帮助大家. 教程: 步骤1:下载镜像文件 从 ...
- vs dump调试
1. dump文件和pdb文件的匹配问题 >> 发布二进制文件时生成的pdb文件一定要保留,只有当发布的二进制文件和pdb文件是同时生成的才好正确调试. 2. dump文件和pdb文件放在 ...
- 苹果建议开发者在iOS 7正式发布之前把应用提交至App Store
今早在给开发者的邮件中,苹果建议开发者在下周9月18日正式发布iOS 7之前把应用提交至App Store.邮件特别提到了iOS 7的新功能,还提到了充分利用iPhone 5S功能的新API,比如M7 ...