BZOJ2694: Lcm
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2694
题解:令f[i]表示i是否有平方因子,则f[i]是积性函数,mu[i]表示莫比乌斯函数。
经过balabala的推导,我们得出ans=sigma(f[i/j]*mu[j]*j*j*sum(n/i,m/i))) sum(x,y)=x*(x+1)/2*y*(y+1)/2
然后我们定义新函数 g[i]=sigma(f[i/d]*mu[d]*d*d) 因为积性函数的狄利克雷卷积仍然是积性函数,所以我们考虑把g数组线筛出来,然后就可以做到sqrt(n)回答询问了。
考虑i%p[j]==0的这部分(初值和i%p[j]!=0可以很简单算出来),如果k=i*p[j]中有p[j]的次数超过2,那么g[k]=0
这是因为我们要在f 和 mu 上分 p[j]的指数,>2时由鸽巢原理知必有一个分到2个以上,那么乘积就是0.
否则 p[j] 的指数为2,我们必须在 f 上分一个,mu上分一个,这样g[k]=g[i/p[j]]*-p[j]*p[j]*p[j] (第一个p[j]是分到f上的,负号是给 mu 的,p[j]*p[j]则是d*d,还是利用了积性函数的性质)
既然是积性函数并且i/p[j]和p[j]*p[j]互质,那么g[k]就等于g[t]*g[p[j]*p[j]] 注意t==1时要特判。
然后这题就做完了。
因为模数奇特所以直接爆int即可。
代码:
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<string>
#define inf 1000000000
#define maxn 4000000+5
#define maxm 4000000
#define eps 1e-10
#define ll long long
#define pa pair<int,int>
#define for0(i,n) for(int i=0;i<=(n);i++)
#define for1(i,n) for(int i=1;i<=(n);i++)
#define for2(i,x,y) for(int i=(x);i<=(y);i++)
#define for3(i,x,y) for(int i=(x);i>=(y);i--)
#define for4(i,x) for(int i=head[x],y=e[i].go;i;i=e[i].next,y=e[i].go)
#define for5(n,m) for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)
#define mod 1073741823
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
return x*f;
}
int tot,p[maxn],g[maxn];
bool v[maxn];
void get()
{
g[]=;
for2(i,,maxm)
{
if(!v[i])p[++tot]=i,g[i]=i-i*i;
for1(j,tot)
{
int k=i*p[j];
if(k>maxm)break;
v[k]=;
if(i%p[j])g[k]=g[i]*g[p[j]];
else
{
int t=i/p[j];
if(t%p[j]==)g[k]=;
else g[k]=-g[t]*p[j]*p[j]*p[j];
break;
}
}
}
for1(i,maxm)g[i]+=g[i-];
}
inline int sum(int n,int m)
{
return n*(n+)*m*(m+)/;
}
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
get();
int T=read();
while(T--)
{
int n=read(),m=read(),ans=;
if(n>m)swap(n,m);
for(int i=,j;i<=n;i=j+)
{
j=min(n/(n/i),m/(m/i));
ans+=sum(n/i,m/i)*(g[j]-g[i-]);
}
printf("%d\n",ans&mod);
}
return ;
}
BZOJ2694: Lcm的更多相关文章
- BZOJ2694 Lcm 【莫比乌斯反演】
BZOJ2694 Lcm Description Input 一个正整数T表示数据组数 接下来T行 每行两个正整数 表示N.M Output T行 每行一个整数 表示第i组数据的结果 Sample I ...
- BZOJ2694:Lcm——包看得懂/看不懂题解
http://www.lydsy.com/JudgeOnline/problem.php?id=2694 Description 对于任意的>1的n gcd(a, b)不是n^2的倍数 也就是说 ...
- 【bzoj2694】Lcm 莫比乌斯反演+线性筛
题目描述 求$\sum\limits_{i=1}^n\sum\limits_{j=1}^m|\mu(gcd(i,j))|lcm(i,j)$,即$gcd(i,j)$不存在平方因子的$lcm(i,j)$之 ...
- LCM性质 + 组合数 - HDU 5407 CRB and Candies
CRB and Candies Problem's Link Mean: 给定一个数n,求LCM(C(n,0),C(n,1),C(n,2)...C(n,n))的值,(n<=1e6). analy ...
- CodeBlocks及LCM应用
以下是在开发过程中遇到的一些细节点: 1)called after throwing an instance of std::bad_alloc 此问题是由于publish(data),当中data赋 ...
- LCM 轻量级通信组件
LCM和ZMQ比较 http://www.doc88.com/p-6711552253536.html 基于LCM和ZeroMQ的进程间通信研究 2.简介 LCM(Lightweight Commuc ...
- uva12546. LCM Pair Sum
uva12546. LCM Pair Sum One of your friends desperately needs your help. He is working with a secret ...
- UVA 10791 Minimum Sum LCM(分解质因数)
最大公倍数的最小和 题意: 给一个数字n,范围在[1,2^23-1],这个n是一系列数字的最小公倍数,这一系列数字的个数至少为2 那么找出一个序列,使他们的和最小. 分析: 一系列数字a1,a2,a3 ...
- LCM在Kernel中的代码分析
lcm的分析首先是mtkfb.c 1.mtk_init中platform_driver_register(&mtkfb_driver)注册平台驱动 panelmaster_init(); DB ...
随机推荐
- Hbase之shell操作
一. 介绍 HBase是一个分布式的.面向列的 开源数据库,源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>.HBase是Google Bigtable的开源 ...
- mac 安装lua并配置Subline Text2 的lua开发环境
1 .下载相应的lua安装包 方法 一 Mointain Lion - Lua 5.2.1 Lion - Lua 5.2.1 Snow Leopard - Lua 5.2.1 Lua 将默认安装到 / ...
- ASP.NET MVC4学习笔记之Controller激活的扩展
一. 为什么要进行扩展 在前面的分析中,我们知道默认的Controller激活系统只能实例化无参构造函数的Controller类型,但在某些情况一下,我们希望某些服务的实例能够自动注入到Control ...
- DevExpress控件使用经验总结- GridView列表行号显示操作
DevExpress是一个比较有名的界面控件套件,提供了一系列的界面控件套件的DotNet界面控件.本文主要介绍我在使用DevExpress控件过程中,遇到或者发现的一些问题解决方案,或者也可以所示一 ...
- EMVTag系列4《5A 应用主账号》
L:var.最大10 -M(必备):此数据应存在并提供给终端,终端在读应用数据过程中,如果没有读到必备数据,终端中止交易:等同磁条上的应用主帐户. 银行卡号一般是16位或者19位.由如下三部分构成: ...
- SQLserver查询数据库所有字段-表名
SELECT * FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME='Account' SELECT (case when a.colorder=1 t ...
- hdu 1237 简单计算器
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1237 简单计算器 Description 读入一个只包含 +, -, *, / 的非负整数计算表达式, ...
- android string.xml %问题
反复检查后发现是string.xml中的 % 导致编译失败, 这是由于新的SDK采用了新版本的aapt(Android项目编译器),这个版本的aapt编译起来会比老版本更加的严格,然后在Android ...
- System.IO之内存映射文件共享内存
内存映射文件是利用虚拟内存把文件映射到进程的地址空间中去,在此之后进程操作文件,就 像操作进程空间里的地址一样了,比如使用c语言的memcpy等内存操作的函数.这种方法能够很好的应用在需要频繁处理一个 ...
- Django+Nginx+MongoDB+Mysql+uWsgi的搭建
搭建目标如下: 图:系统架构图 这个系统可以提供web服务及其它查询应用服务,我用其做一个二手房信息搜集.处理及分发的系统,可以通过浏览器访问,也可以通过定制的客户端进行访问. 一.安装篇 1.下载安 ...