acm.hdu.edu.cn/showproblem.php?pid=4135

【题意】

  • 询问[a,b]中与n互质的数有多少个

【思路】

  • 考虑[1,m]中与n互质的数有多少个,答案就是query(b)-query(a-1)
  • 正难则反,考虑[1,m]中与n不互质的数有多少个
  • 求出n的所有素因子a1,a2,a3
  • 容斥:+m/a1+m/a2+m/a3-m/(a1*a2)-m/(a1*a3)-m/(a2*a3)+m/(a1*a2*a3)

【AC】

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll; ll a,b,n;
const int maxn=1e5+;
ll fac[maxn];
int cnt;
void factor(ll n)
{
cnt=;
for(int i=;i<maxn;i++)
{
if(n%i==)
{
fac[cnt++]=i;
}
while(n%i==)
{
n/=i;
}
}
if(n>) fac[cnt++]=n;
}
ll solve(ll x)
{
ll que[maxn],k,t=;
que[t++]=-;
for(int i=;i<cnt;i++)
{
k=t;
for(int j=;j<k;j++)
{
que[t++]=que[j]*fac[i]*(-);
}
}
ll ans=;
for(int i=;i<t;i++)
{
ans+=x/que[i];
}
return ans;
}
ll query(ll x)
{
return x-solve(x);
}
int main()
{
int T;
scanf("%d",&T);
int cas=;
while(T--)
{
scanf("%I64d%I64d%I64d",&a,&b,&n);
factor(n);
ll ans=query(b)-query(a-);
printf("Case #%d: %I64d\n",++cas,ans);
}
return ;
}

容斥

最新文章

  1. Theano1.1-安装
  2. 用Maven插件生成Mybatis代码/数据库
  3. Spring AOP 详解
  4. 关于StdAfx.h和StdAfx.cpp
  5. 高并发简单解决方案————redis队列缓存+mysql 批量入库(ThinkPhP)
  6. IE5,IE6,IE7,IE8的css兼容性列表[转自MSDN]
  7. nodejs 基本操作
  8. Unity3D导出的EXE不用显示分辨率选择界面
  9. Linux学习笔记4——函数调用栈空间的分配与释放
  10. 计算闰年_winform
  11. oracle有三个默认的用户名和密码,但是都无法登录的解决方法
  12. 根据class显示或隐藏多个div
  13. Java-每日编程练习题①
  14. Java中需要知道的关键字
  15. 查看open office运行状态
  16. ID基本操作(在框架内处理文本)5.28
  17. 【安装】Matlab7.0简介及安装
  18. Python Oracle连接与操作封装
  19. vue中为对象添加值的问题
  20. centos7装机教程

热门文章

  1. sqlserver数据库备份方法
  2. codevs 2919 选择题
  3. strongSwan大坑一直重启(ubuntu)
  4. WPF中单选框RadioButton
  5. ucosii(2.89)mbox 应用要点
  6. JS实现跑马灯效果(向左,向上)
  7. Codeforces Round #272 (Div. 2)-A. Dreamoon and Stairs
  8. 6.python
  9. jquery 获得某一组name的id并合并
  10. Windows10+anaconda,python3.5, 安装glove-python