bzoj 3309 DZY Loves Math——反演+线性筛
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3309
像这种数据范围,一般是线性预处理,每个询问 sqrt (数论分块)做。
先反演一番。然后 f( ) 还不能一个就花 log 的时间,所以要分析性质。
设 n 一共 m 个质因数,其中最大的指数是 t 。
已有 Σ(d|n) f(d)*u(n/d) ,如果 u( ) 的部分含有指数>=2的质因子,就无贡献;所以 u( ) 里每种质因数选1个或0个,一共 2^m 种。
如果 n 里有一个质因子的指数<t ,则卷积的值是0。因为 u 含有的所有集合可以分成含该因子、不含该因子两部分。这两部分含有的集合个数相同,u的符号正好相反,值相同(因为该质因子的有无不影响 f( ) 的值,因为 f( ) 的值是 t 或 t-1),所以求和为0。
所以 n 的质因子必须齐次。那么只有 u( ) 含有所有质因子的时候,f( ) 的值才是 t-1 ,否则都是 t 。除了这两项,其余消成0;再考虑 u( ) 的符号,于是 Σ(d|n) f(d)*u(n/d) = (-1)^(m+1)。
设 g(n) = Σ(d|n) f(d)*u(n/d) ,则 g( ) 可以线性筛。只要记录每个数是否齐次、如果齐次的话次数是几、一共多少种质因子,就能筛了。然后每个询问数论分块即可。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=1e7+;
int T,n,m,g[N],pri[N],cnt,c[N],v[N];
ll ans;
bool fx[N],vis[N];
int rdn()
{
int ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='') ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
return fx?ret:-ret;
}
void calc(int a,int b,int &x,int &y)
{
x=; y=;
while(a%b==)y++,a/=b;
x=a;
}
void init()
{
int lm=1e7;
for(int i=;i<=lm;i++)
{
if(!vis[i])pri[++cnt]=i,g[i]=g[i-]+,fx[i]=c[i]=v[i]=;
else g[i]=g[i-]+(fx[i]?(v[i]&?:-):); for(int j=,k;j<=cnt&&((ll)i*pri[j]<=lm);j++)
{
vis[k=i*pri[j]]=;
if(i%pri[j]==)
{
int d,a;calc(i,pri[j],d,a);
if(d==)
fx[k]=,c[k]=a+,v[k]=;
else if(fx[d]&&c[d]==a+)
fx[k]=,c[k]=c[d],v[k]=v[d]+;
break;
}
else if(fx[i]&&c[i]==)
fx[k]=,c[k]=,v[k]=v[i]+;
}
}
}
int main()
{
init();
T=rdn();
while(T--)
{
n=rdn(); m=rdn(); int nt1,nt2;
if(n>m) swap(n,m);
for(int i=;i<=n;i=min(nt1,nt2)+)
{
nt1=(n/i); nt2=(m/i);
ll d=(ll)nt1*nt2*(g[min(nt1=n/nt1,nt2=m/nt2)]-g[i-]);
ans+=d;
}
printf("%lld\n",ans); ans=;
}
return ;
}
bzoj 3309 DZY Loves Math——反演+线性筛的更多相关文章
- bzoj 3560 DZY Loves Math V - 线性筛 - 扩展欧几里得算法
给定n个正整数a1,a2,…,an,求 的值(答案模10^9+7). Input 第一行一个正整数n. 接下来n行,每行一个正整数,分别为a1,a2,…,an. Output 仅一行答案. Sampl ...
- ●BZOJ 3309 DZY Loves Math
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3309 题解: 莫比乌斯反演,线筛 化一化式子: f(x)表示x的质因子分解中的最大幂指数 $ ...
- BZOJ 3309: DZY Loves Math
3309: DZY Loves Math Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 761 Solved: 401[Submit][Status ...
- bzoj 3309 DZY Loves Math 莫比乌斯反演
DZY Loves Math Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1303 Solved: 819[Submit][Status][Dis ...
- BZOJ 3309: DZY Loves Math [莫比乌斯反演 线性筛]
题意:\(f(n)\)为n的质因子分解中的最大幂指数,求\(\sum_{i=1}^n \sum_{j=1}^m f(gcd(i,j))\) 套路推♂倒 \[ \sum_{D=1}^n \sum_{d| ...
- 【BZOJ3309】DZY Loves Math(线性筛)
题目: BZOJ 3309 分析: 首先,经过一番非常套路的莫比乌斯反演(实在懒得写了),我们得到: \[\sum_{T=1}^n \sum_{d|T}f(d)\mu(\frac{T}{d})\lfl ...
- bzoj 3309 DZY Loves Math —— 莫比乌斯反演+数论分块
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3309 凭着上课所讲和与 Narh 讨论推出式子来: 竟然是第一次写数论分块!所以迷惑了半天: ...
- BZOJ 3309 DZY Loves Math ——莫比乌斯反演
枚举$d=gcd(i,j)$ 然后大力反演 ——来自Popoqqq的博客. 然后大力讨论后面的函数的意义即可. http://blog.csdn.net/popoqqq/article/details ...
- BZOJ 3309: DZY Loves Math 莫比乌斯反演+打表
有一个神奇的技巧——打表 code: #include <bits/stdc++.h> #define N 10000007 #define ll long long #define se ...
随机推荐
- 转:WebRTC技术及应用2 – NAT穿越技术的使用
评:webrtc自带的打洞,穿透协议. 转: http://www.unclekevin.org/?p=924 959 views WebRTC技术及应用2 – NAT穿越技术的使用 发表回复 (题图 ...
- 文件系统之-JAVA Sftp远程操作:
转载:http://blog.csdn.net/lee272616/article/details/52789018 java远程操作文件服务器(linux),使用sftp协议版本会持续更新,当前版本 ...
- -webkit-transform:translate3d(0,0,0)触发GPU加速,让网页动画更流畅
前段时间,依照美拍的视频效果写了一个效果类似的网页版的动画. 电脑上安装了三种浏览器:IE.Chrome.Firefox.分别作了測试,结果显示Chrome在这方面的渲染效果最差.常常出现卡顿现象.f ...
- youtube-dl取代you-get?
以前了解到you-get这个项目,支持超多视频网站下载,不过偶尔会出各种问题. 今天看到依云的博客文章:放弃 you-get,转投 youtube-dl 然后特地看了youtube-dl的支持列表:h ...
- [Python-tools]defaultdict的使用场景
Python标准库中collections对集合类型的数据结构进行了非常多拓展操作.这些操作在我们使用集合的时候会带来非常多的便利.多看看非常有优点. defaultdict是当中一个方法,就是给字典 ...
- python(16)- python内置函数
python内置了一系列的常用函数,以便于我们使用,python英文官方文档详细说明:https://docs.python.org/3/library/functions.html Buil ...
- mysql binlog配置详解
关闭binlog,注释掉mysql配置文件中的log-bin=mysql-bin即可 baidu zone - 关闭binlog方法 cnblogs - linux下mysql配置文件my ...
- Python web 框架:web.py
web.py 是一个Python 的web 框架,它简单而且功能强大.web.py 是公开的,无论用于什么用途都是没有限 制的. web.py 安装: pip install web.py 下面开始我 ...
- angularJS 自定义指令 分页
原理和使用说明 1.插件源码主要基于angular directive来实现. 2.调用时关键地方是后台请求处理函数,也就是从后台取数据. 3.插件有两个关键参数currentPage.itemsPe ...
- JAVA调用命令行2
package loadMBQL; import java.io.File; import java.io.FilenameFilter; public class LoadMBQL { /** * ...