【BZOJ3309】DZY Loves Math 解题报告
【BZOJ3309】DZY Loves Math
Description
对于正整数\(n\),定义\(f(n)\)为\(n\)所含质因子的最大幂指数。例如\(f(1960)=f(2^3×5^1×7^2)=3\),\(f(10007)=1\),\(f(1)=0\)。
给定正整数\(a,b\),求\(\sum\limits_{a_i=1}\sum\limits_{b_j=1}f(\gcd(i,j))\)。
Input
第一行一个数\(T\),表示询问数。
接下来\(T\)行,每行两个数\(a,b\),表示一个询问。
Output
对于每一个询问,输出一行一个非负整数作为回答。
HINT
\(T≤10000\)
\(1≤a,b≤10^7\)
推式子可以得到
\]
设\(g(T)=\sum_{d|T}f(d)\mu(\frac{T}{d})\),想一下卷积发现没啥用,然后我就放弃了。
浪费了一次打表的大好机会...打表可以发现\(g\)只有\(01\)两种值,但是没什么显然的性质,于是我们可以暴力按意义分类讨论取\(0\)或者\(1\)
然后我们讨论一下,设\(p\)代表质数
\(g(p)=1\)
然后在计算式中令\(\frac{T}{d}\)的幂全为\(0\)或\(1\),这样\(\mu\)才能产生贡献。
这样的话可以发现\(f(d)\)只有两种取值\(f(T)\)与\(f(T-1)\),暴力讨论这两种取值。
可以得到式子\(g(T)=-\sum_{d|x\&\&f(d)\not=f(x)}\mu(\frac{x}{d})\)
然后继续讨论可能取的\(01\)情况,发现如果幂全相等,可以取\((-1)^{k+1}\),\(k\)为约数个数
否则就取\(0\)
线筛的时候维护一下最小质因子的幂数和最小质因子的幂
Code:
#include <cstdio>
#include <algorithm>
#define ll long long
const int N=1e7;
using std::min;
int pri[N+10],ispri[N+10],a[N+10],b[N+10],cnt;
ll f[N+10],ans,n,m;
void init()
{
for(int i=2;i<=N;i++)
{
if(!ispri[i])
{
b[i]=pri[++cnt]=i;
f[i]=a[i]=1;
}
for(int j=1;j<=cnt&&i*pri[j]<=N;j++)
{
ispri[i*pri[j]]=1;
if(i%pri[j]==0)
{
a[i*pri[j]]=a[i]+1;
b[i*pri[j]]=b[i]*pri[j];
if(i==b[i]) f[i*pri[j]]=1;
else f[i*pri[j]]=a[i/b[i]]==a[i]+1?-f[i/b[i]]:0;
break;
}
else
{
a[i*pri[j]]=1,b[i*pri[j]]=pri[j];
f[i*pri[j]]=a[i]==1?-f[i]:0;
}
}
}
for(int i=1;i<=N;i++) f[i]+=f[i-1];
}
int main()
{
init();int T;scanf("%d",&T);
while(T--)
{
ans=0;
scanf("%lld%lld",&n,&m);
for(ll l=1,r;l<=min(n,m);l=r+1)
{
r=min(n/(n/l),(m/(m/l)));
ans+=(n/l)*(m/l)*(f[r]-f[l-1]);
}
printf("%lld\n",ans);
}
return 0;
}
2018.12.15
【BZOJ3309】DZY Loves Math 解题报告的更多相关文章
- BZOJ3309 DZY Loves Math(莫比乌斯反演+线性筛)
一通正常的莫比乌斯反演后,我们只需要求出g(n)=Σf(d)*μ(n/d)的前缀和就好了. 考虑怎么求g(n).当然是打表啊.设n=∏piai,n/d=∏pibi .显然若存在bi>1则这个d没 ...
- [BZOJ3309]DZY Loves Math(莫比乌斯反演+线性筛)
$\sum\limits_{T=1}^{n}\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\sum\limits_{d|T}f(d)\mu(\fr ...
- bzoj2154||洛谷P1829 Crash的数字表格&&JZPTAB && bzoj3309 DZY Loves Math
bzoj2154||洛谷P1829 https://www.lydsy.com/JudgeOnline/problem.php?id=2154 https://www.luogu.org/proble ...
- BZOJ3309 : DZY Loves Math
莫比乌斯反演得 $ans=\sum g[i]\frac{a}{i}\frac{b}{i}$ 其中$g[i]=\sum_{j|i}f[j]\mu(\frac{i}{j})$ 由f和miu的性质可得 设$ ...
- CodeForces - 445A - DZY Loves Chessboard解题报告
对于这题本人刚开始的时候觉得应该用DFS来解决实现这个问题,但由于本人对于DFS并不是太熟,所以就放弃了这个想法: 但又想了想要按照这个要求实现问题则必须是黑白相间,然后把是字符是'B'或'W'改为' ...
- 【莫比乌斯反演】BZOJ3309 DZY Loves Math
Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0. 给定正整数a,b, ...
- BZOJ3309 DZY Loves Math 【莫比乌斯反演】
题目 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0. 给定正整数a,b,求sigma(si ...
- codeforces 447C. DZY Loves Sequences 解题报告(446A)
题目链接:http://codeforces.com/problemset/problem/447/C 题目意思:给出 一个 包含 n 个数的序列你,从中需要找出这个序列的最长子串,满足在里面只修改其 ...
- codeforces 445B. DZY Loves Chemistry 解题报告
题目链接:http://codeforces.com/problemset/problem/445/B 题目意思:给出 n 种chemicals,当中有 m 对可以发生反应.我们用danger来评估这 ...
随机推荐
- 04-matplotlib-柱形图
import numpy as np import matplotlib.pyplot as plt # 柱形图 # 例一 N =5 y = [15,28,10,30,25] index = np.a ...
- cobbler部署以及使用
常用软件安装及使用目录 资源链接:https://pan.baidu.com/s/1yfVnuSgY5vOTh-B74tpVyw 网盘分享的文件在此 cobbler第一次操作history. ec ...
- [leetcode-921-Minimum Add to Make Parentheses Valid]
Given a string S of '(' and ')' parentheses, we add the minimum number of parentheses ( '(' or ')', ...
- Scrum立会报告+燃尽图(十二月八日总第三十九次):制定视频方案
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://git.coding.net/zhang ...
- ORACLE中的异常处理
异常的语法格式 在begin语句内: exception when then when then when others then --异常处理 --首先创建一份对象的用法 create type x ...
- 软工实践-Beta 冲刺 (6/7)
队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 1.界面的修改与完善 展示GitHub当日代码/文档签入记 ...
- 项目Beta冲刺(团队)总结
团队成员及分工 姓名 学号 分工 陈家权 031502107 前端(消息模块) 赖晓连 031502118 前端(问答模块) 雷晶 031502119 服务器 林巧娜 031502125 前端(首页模 ...
- HDU 1170 Shopping Offers 离散+状态压缩+完全背包
题目链接: http://poj.org/problem?id=1170 Shopping Offers Time Limit: 1000MSMemory Limit: 10000K 问题描述 In ...
- python learning IO.py
f = open('test.txt', 'r') # 'r' 表示只读 s = f.read() # 调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示 ...
- 谈谈Keil 中C51的内存分配与优化
本帖最后由 Cresta 于 2014-1-21 10:49 编辑 看到这篇C51的内存分配和优化的文章,个人觉得分析的十分到位,在这里转给大家 C51的内存分配不同于一般的PC,内存空间有限,采 ...