【容斥】HDU 4135 Co-prime
2024-09-03 11:19:58
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 ;
}
容斥
最新文章
- Theano1.1-安装
- 用Maven插件生成Mybatis代码/数据库
- Spring AOP 详解
- 关于StdAfx.h和StdAfx.cpp
- 高并发简单解决方案————redis队列缓存+mysql 批量入库(ThinkPhP)
- IE5,IE6,IE7,IE8的css兼容性列表[转自MSDN]
- nodejs 基本操作
- Unity3D导出的EXE不用显示分辨率选择界面
- Linux学习笔记4——函数调用栈空间的分配与释放
- 计算闰年_winform
- oracle有三个默认的用户名和密码,但是都无法登录的解决方法
- 根据class显示或隐藏多个div
- Java-每日编程练习题①
- Java中需要知道的关键字
- 查看open office运行状态
- ID基本操作(在框架内处理文本)5.28
- 【安装】Matlab7.0简介及安装
- Python Oracle连接与操作封装
- vue中为对象添加值的问题
- centos7装机教程
热门文章
- sqlserver数据库备份方法
- codevs 2919 选择题
- strongSwan大坑一直重启(ubuntu)
- WPF中单选框RadioButton
- ucosii(2.89)mbox 应用要点
- JS实现跑马灯效果(向左,向上)
- Codeforces Round #272 (Div. 2)-A. Dreamoon and Stairs
- 6.python
- jquery 获得某一组name的id并合并
- Windows10+anaconda,python3.5, 安装glove-python