题目大意:

求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:数论+容斥的更多相关文章

  1. POJ 1150 The Last Non-zero Digit 数论+容斥

    POJ 1150 The Last Non-zero Digit 数论+容斥 题目地址: id=1150" rel="nofollow" style="colo ...

  2. Coprime (单色三角形+莫比乌斯反演(数论容斥))

    这道题,先说一下单色三角形吧,推荐一篇noip的论文<国家集训队2003论文集许智磊> 链接:https://wenku.baidu.com/view/e87725c52cc58bd631 ...

  3. 数论 + 容斥 - HDU 4059 The Boss on Mars

    The Boss on Mars Problem's Link Mean: 给定一个整数n,求1~n中所有与n互质的数的四次方的和.(1<=n<=1e8) analyse: 看似简单,倘若 ...

  4. 数论 + 容斥 - 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, ...

  5. HDU - 2204 Eddy's爱好 (数论+容斥)

    题意:求\(1 - N(1\le N \le 1e18)\)中,能表示成\(M^k(M>0,k>1)\)的数的个数 分析:正整数p可以表示成\(p = m^k = m^{r*k'}\)的形 ...

  6. 【bzoj2393】Cirno的完美算数教室 数论容斥

    Description ~Cirno发现了一种baka数,这种数呢~只含有2和⑨两种数字~~ 现在Cirno想知道~一个区间中~~有多少个数能被baka数整除~ 但是Cirno这么天才的妖精才不屑去数 ...

  7. CROC 2016 - Elimination Round (Rated Unofficial Edition) F - Cowslip Collections 数论 + 容斥

    F - Cowslip Collections http://codeforces.com/blog/entry/43868 这个题解讲的很好... #include<bits/stdc++.h ...

  8. HDU 5514 Frogs (数论容斥)

    题意:有n只青蛙,m个石头(围成圆圈).第i只青蛙每次只能条ai个石头,问最后所有青蛙跳过的石头的下标总和是多少? 析:首先可以知道的是第 i 只青蛙可以跳到 k * gcd(ai, m),然后我就计 ...

  9. UOJ #129 / BZOJ 4197 / 洛谷 P2150 - [NOI2015]寿司晚宴 (状压dp+数论+容斥)

    题面传送门 题意: 你有一个集合 \(S={2,3,\dots,n}\) 你要选择两个集合 \(A\) 和 \(B\),满足: \(A \subseteq S\),\(B \subseteq S\), ...

随机推荐

  1. javascript表单验证-邮箱验证

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  2. 聚聚科技---PHP开发笔试题及答案

    1. echo(), print(), print_r()的区别? echo是PHP语言结构, print和print_r是函数.语言结构没有返回值,函数可以有返回值(即便没有用)  . print( ...

  3. 设置UIScrollView只可以水平或者竖直滚动

    UIScrollView里边包含多个UIWebView: 可以通过设置contentSize的值,设置其width为UIScrollerView可视区域的宽度:即UIScrollView的width, ...

  4. ios开发中各种版本、设备的区分

    设备类型的区分-iphone ,ipad-itouch..... 可以从 UIDevice 的属性 model 得到在现在执行的环境.例子如下: [cpp] view plaincopyprint? ...

  5. 在Ubuntu下构建Bullet以及执行Bullet的样例程序

    在Ubuntu下构建Bullet以及执行Bullet的样例程序 1.找到Bullet的下载页,地址是:https://code.google.com/p/bullet/downloads/list 2 ...

  6. (3)选择元素——(9)为交替的列加样式(Styling alternate rows)

    Two very useful custom selectors in the jQuery library are :oddand :even. Let's take a look at how w ...

  7. R语言——包的添加和使用

    R是开源的软件工具,很多R语言用户和爱好者都会扩展R的功能模块,我们把这些模块称为包.我们可以通过下载安装这些已经写好的包来完成我们需要的任务工作. 包下载地址:https://cran.r-proj ...

  8. 小学生之手(01)之 "for循环"

    ---恢复内容开始--- 咳咳咳!第一次要写这种东西,要是有不足的地方,请见谅!!!并且感觉在这班门弄斧是不是有点托大了.一向擅长低调的我,在’被逼无奈‘之下,要嚣张一下了......(此处省略500 ...

  9. NET下三种缓存机制(Winform里面的缓存使用 )

    原文(http://www.cnblogs.com/wuhuacong/p/3526335.html)非常感谢伍华聪作者的分享! 缓存在很多情况下需要用到,合理利用缓存可以一方面可以提高程序的响应速度 ...

  10. u盘启动盘制作工具

    u盘启动盘制作工具http://www.dabaicai.biz/ 系统镜像文件下载:http://xt.qingdiangongsi.cn/xtxz/