【HDU1695】GCD(莫比乌斯反演)
来源:互联网 发布:公司数据库搭建 编辑:程序博客网 时间:2024/05/01 12:30
题面
题目大意
求
且
其中,你可以假定
所有数都
数据组数
题解
莫比乌斯反演
作为一道莫比乌斯反演的题目
首先我们要迈出第一步
如果有
那么,我们就有
所以,现在问题相当于转化为了求
且
设
很容易的,
通过莫比乌斯反演就可以直接计算啦
时间复杂度
再提一句,因为是无序的数对
所以要减去重复计算的地方。。。
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>#include<set>#include<map>#include<vector>#include<queue>using namespace std;#define MAX 101000inline int read(){ int x=0,t=1;char ch=getchar(); while((ch<'0'||ch>'9')&&ch!='-')ch=getchar(); if(ch=='-')t=-1,ch=getchar(); while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar(); return x*t;}int mu[MAX],pri[MAX],tot;long long g[MAX],n,a,b,K;bool zs[MAX];void Get(){ zs[1]=true;mu[1]=1; for(int i=2;i<=n;++i) { if(!zs[i])pri[++tot]=i,mu[i]=-1; for(int j=1;j<=tot&&i*pri[j]<=n;++j) { zs[i*pri[j]]=true; if(i%pri[j])mu[i*pri[j]]=-mu[i]; else {mu[i*pri[j]]=0;break;} } }}int main(){ n=100000; Get(); int T=read(),Case=0; while(T--) { cout<<"Case "<<++Case<<": "; read();a=read();read();b=read();K=read(); if(!K){puts("0");continue;} a/=K;b/=K; long long ans=0,mi=0; for(int i=1;i<=min(a,b);++i)g[i]=1ll*(a/i)*(b/i); for(int i=1;i<=min(a,b);++i)ans+=1ll*mu[i]*g[i]; for(int i=1;i<=min(a,b);++i)mi+=1ll*mu[i]*(min(a,b)/i)*(min(a,b)/i); printf("%lld\n",ans-mi/2); } return 0;}
阅读全文
1 0
- HDU1695 GCD(莫比乌斯反演)
- hdu1695 gcd 莫比乌斯反演
- [hdu1695][莫比乌斯反演]Gcd
- hdu1695 GCD(莫比乌斯反演)
- [HDU1695]GCD(莫比乌斯反演)
- hdu1695 GCD(莫比乌斯反演)
- [HDU1695]GCD(莫比乌斯反演)
- hdu1695 GCD(莫比乌斯反演)
- 【HDU1695】GCD(莫比乌斯反演+优化)
- 【HDU1695】GCD(莫比乌斯反演)
- [HDU1695]GCD(莫比乌斯反演+讲解)
- HDU1695 GCD 数论之 莫比乌斯反演
- 【HDU1695】GCD(莫比乌斯反演+容斥)
- HDU1695——GCD(莫比乌斯反演)
- hdu1695 GCD 学习莫比乌斯反演
- hdu1695 莫比乌斯反演
- hdu1695莫比乌斯反演
- hdu1695 莫比乌斯反演
- jquery 地图缩放时禁止父容器滚动条滚动
- sscanf函数用法详解
- hadoop集群中运行中时服役和退役节点
- Spring MVC中Date处理
- 283MoveZeroes
- 【HDU1695】GCD(莫比乌斯反演)
- 虚拟机Ubuntu14.04+MXNET+CPU安装
- c语言实现二叉树常用算法
- 通过C++实现判断点与多边形的关系和两点之间的距离
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
- 关于Home Lab的搭建——像使用服务器一样远程管理(三)
- Mybatis之缓存
- maven私服搭建和使用
- 关于Thread中的toString的问题