hdu 3388 Coprime
2024-10-08 16:08:34
第一个容斥的题,感觉这东西好神啊。于是扒了一发题解2333
首先想对于[1,x]内有多少与n,m都互质的数,显然x是存在单调性的,所以可以二分一下。
那么互质的数的求法,就是x-存在n,m一个质因数的+存在2个质因数-3+4.....暴力搜索就可以(搜索都不会写233)
#include<bits/stdc++.h>
#define N 100005
#define M 10000005
#define lowbit(x) x&(-x)
#define LL long long
#define inf 0x3f3f3f3f
using namespace std;
inline int ra()
{
int x=,f=; char ch=getchar();
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
return x*f;
}
map<int ,bool > mp;
int n,m,k,cnt;
LL p[N];
void getprime(LL x)
{
for (LL i=; i*i<=x; i++)
{
if (x%i== && !mp[i])
{
mp[i]=; p[++cnt]=i;
}
while (x%i==) x/=i;
}
if (x> && !mp[x]) mp[x]=,p[++cnt]=x;
}
LL dfs(int pos, LL x)
{
LL ans=;
for (int i=pos; i<=cnt; i++)
ans+=x/p[i]-dfs(i+,x/p[i]);
return ans;
}
LL find(LL l, LL r, LL k)
{
while (l<=r)
{
LL mid=l+r>>;
if ((mid-dfs(,mid))<k) l=mid+;
else r=mid-;
}
return l;
}
int main()
{
int T=ra(); int cse=;
while (T--)
{
n=ra(); m=ra(); k=ra();
mp.clear(); cnt=;
getprime((LL)n); getprime((LL)m);
printf("Case %d: %I64d\n",++cse, find(1LL,1000000000000000LL,(LL)k));
}
return ;
}
最新文章
- JavaScript高级编程 (1) - javscript是什么
- SCI Index
- sql注入基于错误-单引号-字符型
- FPGA Verilog HDL 系列实例--------步进电机驱动控制
- Android学习笔记之如何使用圆形菜单实现旋转效果...
- 转ATL对象类型
- HDU4607+BFS
- phpDesigner 7.2.5 注册码 更改 语法高亮 主题
- Visual Studio 如何给生成的exe加入多个图标资源
- ios沙盒查找图片展示
- fastDFS与java整合文件上传下载
- Flink从入门到放弃(入门篇4) DataStreamAPI
- Linux 开(关) ICMP 回应(防止被ping)
- Vue 加载第三方插件
- python+unnitest时运行后不执行main函数里面的内容
- ASP.NET Identity V2简单介绍
- 【kafka】confluent_kafka重置offset
- JS_高程2.在HTML中使用Javascript(2)
- springmvc.xml 中 <;url-pattern>;<;/url-pattern>;节点详解
- ubuntu 16.04 编译安装 trl8291cu系列 无线网卡驱动
热门文章
- Logback的AsyncAppender与RollingFileAppender流程解析
- 三 保存客户&;分页查询&;Spring解决延迟加载问题
- [DllImport(";kernel32.dll";)]
- pytorch max和clamp
- 原生JS写表单验证提交功能
- python 输入年月日,返回当天是星期几
- redisTemplate注入为空
- tab选项卡,不带自动切换定时器
- 官网英文版学习——RabbitMQ学习笔记(四)Work queues
- Ubuntu上安装tftp服务