HDU 4135 Co-prime (容斥+分解质因子)
<题目链接>
题目大意:
给定区间[A,B](1 <= A <= B <= 10 15)和N(1 <=N <= 10 9),求出该区间中与N互质的数的个数。
解题分析:
将求区间[A,B]与N互质的数转化成求[1,B] 区间与N互质的个数 - [1,A-1]中与N互质的个数。同时,因为直接求区间内与N互质的数不好求,我们从反面入手,求出与N不互质的数,借鉴埃筛的思想,我们先求出N的所有质因子,然后将这些质因子在区间内倍数的个数全部求出(即与N不互质的数),再用区间的总数减去这些不互质数的个数即可。但是,由于在求不互质的数的时候,存在重复的计算,所以我们利用容斥对重复计算的数进行处理。容斥处理有多重表现形式,DFS、队列、位运算均可进行容斥处理。
得到一个数的所有质因子:
for(ll i=;i*i<=m;i++)
if( m%i==){ //得到m的所有的素因子
vec.push_back(i);
while(m%i==)m/=i;
}
if(m>)vec.push_back(m);
位运算:
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std; typedef long long ll;
vector<ll>vec;
ll a,b,n; ll solve(ll x,ll m){ //[1,x]区间内与m4互质的数的个数
vec.clear();
for(ll i=;i*i<=m;i++) if( m%i==){ //得到m的所有的素因子
vec.push_back(i);
while(m%i==)m/=i;
}
if(m>)vec.push_back(m);
ll sum=,val,cnt;
for(ll i=;i<(<<vec.size());i++){ //枚举所有素因子的乘积组合,用二进制表示哪几个因子被用到
val=,cnt=;
for(ll j=;j<vec.size();j++){
if(i & (<<j)) { //因为vec里全为质数,所以它们进行组合的时候,直接相乘就行,而不用求lcm
val*=vec[j],cnt++; //cnt表示当前相乘因子的个数,用于后面容斥时进行加减的判断
}
}
//容斥,奇加偶减
if(cnt & )sum+=x/val; // x/tval为[1,x]内为tval的倍数的数的个数
else sum-=x/val;
}
return x-sum; //[1,x]的总数减去1~X中各素数倍数的总数
} int main(){
int T,ncase=;scanf("%d",&T);while(T--){
scanf("%lld%lld%lld",&a,&b,&n);
ll ans=solve(b,n)-solve(a-,n);
printf("Case #%d: %lld\n",++ncase,ans);
}
}
2019-02-09
HDU 4135 Co-prime (容斥+分解质因子)的更多相关文章
- UVA 10780 Again Prime? No Time. 分解质因子
The problem statement is very easy. Given a number n you have to determine the largest power of m,no ...
- HDU 4497 GCD and LCM(分解质因子+排列组合)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4497 题意:已知GCD(x, y, z) = G,LCM(x, y, z) = L.告诉你G.L,求满 ...
- 题解报告:hdu 4135 Co-prime(容斥定理入门)
Problem Description Given a number N, you are asked to count the number of integers between A and B ...
- HDU 4135 Co-prime(容斥+数论)
Co-prime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU 4135 Co-prime(容斥:二进制解法)题解
题意:给出[a,b]区间内与n互质的个数 思路:如果n比较小,我们可以用欧拉函数解决,但是n有1e9.要求区间内互质,我们可以先求前缀内互质个数,即[1,b]内与n互质,求互质,可以转化为求不互质,也 ...
- Hdu 5072 Coprime(容斥+同色三角形)
原题链接 题意选出三个数,要求两两互质或是两两不互质.求有多少组这样的三个数. 分析 同色三角形n个点 每两个点连一条边(可以为红色或者黑色),求形成的三条边颜色相同的三角形的个数反面考虑这个问题,只 ...
- hdu6237 分解质因子
题意:给一堆石子,每次移动一颗到另一堆,要求最小次数使得,所有石子数gcd>1 题解:枚举所有质因子,然后找次数最小的那一个,统计次数时,我们可以事先记录下每堆石子余质因子 的和,对所有石子取余 ...
- NYOJ-476谁是英雄,分解质因子求约数个数!
谁是英雄 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 十个数学家(编号0-9)乘气球飞行在太平洋上空.当横越赤道时,他们决定庆祝一下这一壮举.于是他们开了一瓶香槟.不 ...
- C - Visible Trees HDU - 2841 -莫比乌斯函数-容斥
C - Visible Trees HDU - 2841 思路 :被挡住的那些点(x , y)肯定是 x 与 y不互质.能够由其他坐标的倍数表示,所以就转化成了求那些点 x,y互质 也就是在 1 - ...
随机推荐
- 基础常用的数据结构 Collection Map
map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等.其中这四者的区别如下(简单介绍): HashMap:我们最常用的Map ...
- ModuleNotFoundError: No module named 'requests'
1.问题描述 DOS 执行 .py 脚本报错: ModuleNotFoundError: No module named 'requests' ModuleNotFoundError: No modu ...
- Vue2.0 新手完全填坑攻略—从环境搭建到发布
http://www.open-open.com/lib/view/open1476240930270.html https://jingyan.baidu.com/article/91f5db1b2 ...
- 雅礼 noip2018 模拟赛 day3 T3
典型树形dp 这里,我们应该看到一些基本性质: ①:如果这个边不能改(不是没有必要改),我们就不改,因为就算改过去还要改回来,显然不是最优的 注意:"不能改"是指边的性质和要求的相 ...
- Allegro PCB Design GXL (legacy) 设置十字大光标
Allegro PCB Design GXL (legacy) version 16.6-2015 1.菜单:Setup > User Preferences... 2.User Prefere ...
- Linux系统下目录的权限意义
访问者及其基本权限 Linux系统内的文件访问者有三种身份,分别是: a) 文件和文件目录的所有者: u---User(所有权);b) 文件和文件目录的所有者所在的组的用户: g---Group;c) ...
- 将labelme 生成的.json文件进行可视化的代码+label.png 对比度处理的matlab代码
labelme_to_dataset 指令的代码实现: show.py文件 #!E:\Anaconda3\python.exe import argparse import json import o ...
- SVN_2008R2 搭建流程与规范
Svn服务在win2008 搭建 1:svn服务的原理与架构 1.Svn服务可以理解为加强版的ftp文件服务器, svn采用HTTP协议的方式进行文件传输 2.服务端安装好后,普通用户也需要下载一个c ...
- 安装和配置bazel
2018-12-26 21:56:23 编译和移植tensorflow的C/C++源码时,用到bazel这一构建工具.本篇blog记录遇到的安装.配置问题. 吐槽 构建工具,从make/ant/cma ...
- EF Core MYSQL 生成表映射配置问题
Model表 public class Goods { public string ID { get; set; } public string CreatedBy { get; set; } pub ...