博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu-1796
阅读量:4286 次
发布时间:2019-05-27

本文共 1167 字,大约阅读时间需要 3 分钟。

   

题意:给你两个数n,m,即让你从1~n-1个数里有多少个能整除m个数中任意一个数?

题解:容斥原理:ORZ vici大牛写的比较详细   

 

/************************************************************                       容斥原理**   求几个数的组合(用二进制优化枚举各个状态)的最小公倍数,*   用n/lcm,如果这几个数的个数为奇数则加,偶数则减,*   注:当这几个数有0时,先把0给去掉***************************************************************/#include
#include
#include
#include
using namespace std;typedef long long LL;int st[15];LL n;LL Gcd(LL a,LL b){//最大公约数 return b == 0 ? a : Gcd(b,a%b);}LL Lcm(LL a,LL b){//最小公倍数 return a * b / Gcd(a,b);}LL find(int num){//寻找组合 int cnt = 0,c = 0; LL lcm = 1; while(num){ if(num & 1) {lcm = Lcm(lcm,(LL)st[cnt]);c++;} cnt ++; num /= 2; } LL ans = (n-1) / lcm; if(c % 2) return ans; return -ans;}void solve(int m){//枚举各个状态二进制优化 LL sum = 0; for(int i = 1;i < (1 << m) ;i++) { sum += find(i); } cout << sum << endl;}int main(){// freopen("1.txt","r",stdin); int x,m; while(cin >> n >> m){ int k = 0; for(int i = 0;i < m;i++){ cin >> x; if(x) //如果存在0,先排除 st[k ++] = x; } solve(k); }}

转载地址:http://tcsgi.baihongyu.com/

你可能感兴趣的文章
多目标进化算法(MOEAs)概述
查看>>
AdaBoost与随机森林区别
查看>>
坐标下降法(Coordinate descent)
查看>>
Matlab plot画图 坐标字体、字号、范围、间隔等的设置
查看>>
LATEX调整公式、图片与正文间距离,文字间距离,调整空白大小
查看>>
eps格式图像空白边缘裁剪
查看>>
稀疏问题的学习
查看>>
机器学习(6) MovieLens数据集
查看>>
matlab读取UCI中获取的.data文件
查看>>
matlab错误:Subscript indices must either be real positive integers or logicals.
查看>>
行列式及其性质
查看>>
matlab 保留固定长度的整数位
查看>>
xshell-常用命令
查看>>
用xshell运行matlab 远程给Linux服务器安装Matlab R2014b
查看>>
在本地电脑使用远程服务器的图形界面——包括 MATLAB、PyCharm 等各种软件
查看>>
向量转置怎么求导(多元线性回归原理推导用)
查看>>
Matlab中布尔值/逻辑值与数值型类型的相互转换
查看>>
Matlab 并行代码
查看>>
matlab中的并行方法与理解(2):parfor中的变量类型
查看>>
CentOS 7 命令行模式安装teamviewer13
查看>>