hdu1695:数论+容斥
题目大意:
求x属于[1,b]和 y属于[1,d]的 gcd(x,y)=k 的方案数
题解:
观察发现 gcd()=k 不好处理,想到将x=x/k,y=y/k 后 gcd(x,y)=1。。
即问题转化为求区间 [1,b/k]和 [1,d/k]的互质数对个数
由于题目规定 (x,y)和(y,x)是同一种,所以我们可以规定 x<y,,然后只需对每一个y求出比他小的即可
公共部分可以通过欧拉函数快速求出。。
非公共部分就不行了。。
所以就分解质因数,用容斥的方法求了
#include <iostream>
#include <stdio.h>
#include<string.h>
#include<algorithm>
#include<string>
#include<ctype.h>
using namespace std;
#define maxn 100000
int isnotprime[maxn+];
int num[maxn+];
int fac[maxn+][];
int prime[maxn];
int euler[maxn+];
int np;
int a,b,c,d,k,n,m;
long long ans;
void setprime()
{
np=;
memset(isnotprime,,sizeof(isnotprime));
for(int i=;i<=;i++)
{
if(!isnotprime[i])
prime[np++]=i;
for(int j=;j<np&&prime[j]*i<=;j++)
{
isnotprime[i*prime[j]]=;
if(i%prime[j]==)
break;
}
}
}
void findfac(int x)
{
num[x]=;
int p=x;
for(int i=;i<np;i++)
{
if(p%prime[i]==)
{
fac[x][num[x]++]=prime[i];
}
while(p%prime[i]==)
{
p/=prime[i];
}
}
if(p>)
{
fac[x][num[x]++]=p;
}
}
void setfac()
{
for(int i=;i<=maxn;i++)
{
findfac(i);
}
}
void phi()
{
for(int i=;i<=maxn;i++)
euler[i]=i;
for(int i=;i<=maxn;i+=)
euler[i]/=;
for(int i=;i<=maxn;i++)
{
if(euler[i]==i) //未被筛到。是素数,则用此素数来筛
{
for(int j=i;j<=maxn;j+=i)
{
euler[j]=euler[j]/i*(i-);
}
}
}
return ;
}
void ini()
{
scanf("%d%d%d%d%d",&a,&b,&c,&d,&k);
}
int iae(int x)
{
int res=;
int cur,tmp;
for(int i=;i<(<<num[x]);i++)
{
cur=;
tmp=;
for(int j=;j<num[x];j++)
{
if(i&(<<j))
{
cur*=fac[x][j];
tmp++;
}
}
if(tmp&)
{
res+=m/cur;
}
else
{
res-=m/cur;
}
}
return m-res;
}
int cas=;
void solve()
{
printf("Case %d: ",cas++);
if(k==)
{
puts("");
return;
}
m=min(b/k,d/k);
n=max(b/k,d/k);
ans=;
for(int i=;i<=m;i++)
{
ans+=euler[i];
}
for(int i=m+;i<=n;i++)
{
ans+=iae(i);
}
printf("%I64d\n",ans);
}
int main()
{
setprime();
setfac();
phi();
int t;
scanf("%d",&t);
while(t--)
{
ini();
solve();
}
return ;
}
hdu1695:数论+容斥的更多相关文章
- POJ 1150 The Last Non-zero Digit 数论+容斥
POJ 1150 The Last Non-zero Digit 数论+容斥 题目地址: id=1150" rel="nofollow" style="colo ...
- Coprime (单色三角形+莫比乌斯反演(数论容斥))
这道题,先说一下单色三角形吧,推荐一篇noip的论文<国家集训队2003论文集许智磊> 链接:https://wenku.baidu.com/view/e87725c52cc58bd631 ...
- 数论 + 容斥 - HDU 4059 The Boss on Mars
The Boss on Mars Problem's Link Mean: 给定一个整数n,求1~n中所有与n互质的数的四次方的和.(1<=n<=1e8) analyse: 看似简单,倘若 ...
- 数论 + 容斥 - HDU 1695 GCD
problem's Link mean 给定五个数a,b,c,d,k,从1~a中选一个数x,1~b中选一个数y,使得gcd(x,y)=k. 求满足条件的pair(x,y)数. analyse 由于b, ...
- HDU - 2204 Eddy's爱好 (数论+容斥)
题意:求\(1 - N(1\le N \le 1e18)\)中,能表示成\(M^k(M>0,k>1)\)的数的个数 分析:正整数p可以表示成\(p = m^k = m^{r*k'}\)的形 ...
- 【bzoj2393】Cirno的完美算数教室 数论容斥
Description ~Cirno发现了一种baka数,这种数呢~只含有2和⑨两种数字~~ 现在Cirno想知道~一个区间中~~有多少个数能被baka数整除~ 但是Cirno这么天才的妖精才不屑去数 ...
- CROC 2016 - Elimination Round (Rated Unofficial Edition) F - Cowslip Collections 数论 + 容斥
F - Cowslip Collections http://codeforces.com/blog/entry/43868 这个题解讲的很好... #include<bits/stdc++.h ...
- HDU 5514 Frogs (数论容斥)
题意:有n只青蛙,m个石头(围成圆圈).第i只青蛙每次只能条ai个石头,问最后所有青蛙跳过的石头的下标总和是多少? 析:首先可以知道的是第 i 只青蛙可以跳到 k * gcd(ai, m),然后我就计 ...
- UOJ #129 / BZOJ 4197 / 洛谷 P2150 - [NOI2015]寿司晚宴 (状压dp+数论+容斥)
题面传送门 题意: 你有一个集合 \(S={2,3,\dots,n}\) 你要选择两个集合 \(A\) 和 \(B\),满足: \(A \subseteq S\),\(B \subseteq S\), ...
随机推荐
- (转)awk命令
转自:http://man.lupaworld.com/content/manage/ringkee/awk.htm#id2874788 整理:Jims of 肥肥世家 <jims.yang@g ...
- @JoinTable和@JoinColumn
默认情况下,JPA 持续性提供程序在映射多对多关联(或在单向的一对多关联中)的拥有方上的实体关联时使用一个连接表.连接表名称及其列名均在默认情况下指定,且 JPA 持续性提供程序假设:在关系的拥有方上 ...
- 最长回文字符串(manacher算法)
偶然看见了人家的博客发现这么一个问题,研究了一下午, 才发现其中的奥妙.Stupid. 题目描述: 回文串就是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串. ...
- 一、Solr综述
什么是Solr搜索 我们经常会用到搜索功能,所以也比较熟悉,这里就简单的介绍一下搜索的原理. 当然只是介绍solr的原理,并不是搜索引擎的原理,那会更复杂. 流程图 这是一个非常简单的流程图: Use ...
- Qt学习博客推荐
附录C Qt资源 C.1 Qt 官方资源 全 球各大公司以及独立开发人员每天都在加入 Qt 的开发社区.他们已经认识到了Qt 的架构本身便可加快应用程序开发进度.这些开发人员,无论是想开发单平台软件. ...
- 使用VisualVM查看Java Heap Dump
浏览Heap Dump 可以使用VisualVM浏览heap dump文件的内容,从而快速查看在堆中分配的对象.Heap dumps在主窗口的heap dump子标签页中显示.你可以打开保存在本地的h ...
- jquery之多重判断
var appPath = getAppPath(); $(function(){ $('#addTeskDlg').window('close'); teskGrid(); }); function ...
- Universal-Image-Loader 示例 工具
Base public class MyApplication extends Application { @Override public void onCreate() { ...
- DOM中的NodeList与HTMLCollection
最近在看<Javascript高级程序设计>的时候,看到了这样一句话:“理解NodeList和HTMLCollection,是从整体上透彻理解DOM的关键所在.”,所以觉得应该写一篇关于N ...
- js操作符
JS操作符 x + y(数字) 将x和y相加; x + y(字符串) 将x和y拼接在一起; x - y 从x中减去y; x * y 将x和y相乘; x / y 将x除以y; x % y x和y的模(既 ...