bzoj2820 YY的GCD
2016-04-05 00:12
465 查看
2820: YY的GCD
Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1296 Solved: 672
[Submit][Status][Discuss]
Description
神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对
kAc这种傻×必然不会了,于是向你来请教……
多组输入
Input
第一行一个整数T 表述数据组数接下来T行,每行两个正整数,表示N, M
Output
T行,每行一个整数表示第i组数据的结果Sample Input
210 10
100 100
Sample Output
302791
HINT
T = 10000N, M <= 10000000
莫比乌斯反演
与bzoj2301类似,答案ans=∑(p)∑(1≤d≤n/p)mu[d]*(n/pd)*(n/pd)。
令T=pd,则ans=∑(1≤T≤n)(n/T)*(m/T)∑(p|T)mu[T/p]。
设f(T)=∑(p|T)mu[T/p],如果能预处理出f(T)和前缀和,则采用分块就可以在O(sqrt(n))复杂度内完成单次询问。
如何预处理?只需要枚举每一个质数,暴力修改它的所有倍数即可。因为每个质数的修改次数均摊ln(n),而n以内质数个数接近n/ln(n),则总复杂度是约等于O(n)的。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define F(i,j,n) for(int i=j;i<=n;i++)
#define D(i,j,n) for(int i=j;i>=n;i--)
#define ll long long
#define maxn 10000000
using namespace std;
int n,m,t,tot;
int pri[maxn+5],mu[maxn+5];
ll f[maxn+5];
bool mark[maxn+5];
inline int read()
{
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
inline void getmu()
{
mu[1]=1;
F(i,2,maxn)
{
if (!mark[i]) pri[++tot]=i,mu[i]=-1;
for(int j=1;j<=tot&&i*pri[j]<=maxn;j++)
{
mark[i*pri[j]]=true;
if (i%pri[j]==0){mu[i*pri[j]]=0;break;}
else mu[i*pri[j]]=-mu[i];
}
}
F(i,1,tot) for(int j=1;j*pri[i]<=maxn;j++) f[j*pri[i]]+=mu[j];
F(i,1,maxn) f[i]+=f[i-1];
}
int main()
{
getmu();
t=read();
while (t--)
{
ll ans=0;
n=read();m=read();
if (n>m) swap(n,m);
for(int i=1,pos;i<=n;i=pos+1)
{
pos=min(n/(n/i),m/(m/i));
ans+=(f[pos]-f[i-1])*(n/i)*(m/i);
}
printf("%lld\n",ans);
}
return 0;
}
相关文章推荐
- 堆、栈的认识
- ACM:HDU-1005 Number Sequence
- 如何成为一个优秀的程序员(大部分写的都非常不错)——要勤快,不停的学习;争论是无意义的,不如把两种都学了,会更有收获。
- mybatis整合ss的时候,无法autowire使用mapper的自动注入,找不到bean:NoSuchBeanDefinitionException
- 精选30道Java笔试题解答
- javascript--aop实现
- SPI和API的区别
- 用csdn mark-down 写博客
- Python中index()和seek()的用法
- easyui左侧导航菜单右侧载入百度地图项目框架
- 3月-月总结
- android-auto-scroll-view-pager-master的使用
- JSONP处理同源策略
- c++实验2-标准体重
- 一台独立的服务器是可以可以建立多个网站的,一个ip地址,一个端口
- frame、bounds、center
- 8个经过证实的方法:提高机器学习模型的准确率
- AsyncTask和Handler的对比
- 趣味编程 - 最小周期串长度
- Net 第一天的笔记和心得