UVA 10325 - The Lottery ( 容斥 )
2015-08-27 11:02
399 查看
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1266
题 意:求出1~n个数中不能被输入的m个数任意一个数整除的数的个数。
思 路:利用容斥原理计算n-(1^n中质数能被m个数中的一个整除的数的个数。
例如样例一:10-能被2整除的数-能被3整除的数+能被6(即2与3的最小公倍数)整除的数;
样例二:20-能被2整除的数-能被4整除的数+能被4(即2与4的最小公倍数)整除的数。
代码如下:#include <iostream>
using namespace std;
#include <string.h>
#include <stdio.h>
#include <climits>
#include <algorithm>
#define maxn 65535
typedef long long LL;
LL vis[33];
LL gcd( LL a, LL b )
{
return b?gcd(b,a%b):a;
}
int main()
{
int n, m;
while( scanf ( "%d %d", &n, &m ) != EOF )
{
for( int i = 0; i < m; i ++ )
scanf ( "%lld", &vis[i] );
int sum = 0;
for( int i = 1; i < ( 1 << m ); i ++ )
{
LL mu = 1, ones = 0;
for( int j = 0; j < m; j ++ )
if( i & (1<<j) )
{
mu = vis[j]/gcd(mu,vis[j])*mu;
if( mu > n ) break;
ones++;
}
if( mu > n ) continue;
if( ones%2==1) sum += n/mu;
else sum -= n/mu;
}
printf("%d\n",n-sum);
}
return 0;
}
题 意:求出1~n个数中不能被输入的m个数任意一个数整除的数的个数。
思 路:利用容斥原理计算n-(1^n中质数能被m个数中的一个整除的数的个数。
例如样例一:10-能被2整除的数-能被3整除的数+能被6(即2与3的最小公倍数)整除的数;
样例二:20-能被2整除的数-能被4整除的数+能被4(即2与4的最小公倍数)整除的数。
代码如下:#include <iostream>
using namespace std;
#include <string.h>
#include <stdio.h>
#include <climits>
#include <algorithm>
#define maxn 65535
typedef long long LL;
LL vis[33];
LL gcd( LL a, LL b )
{
return b?gcd(b,a%b):a;
}
int main()
{
int n, m;
while( scanf ( "%d %d", &n, &m ) != EOF )
{
for( int i = 0; i < m; i ++ )
scanf ( "%lld", &vis[i] );
int sum = 0;
for( int i = 1; i < ( 1 << m ); i ++ )
{
LL mu = 1, ones = 0;
for( int j = 0; j < m; j ++ )
if( i & (1<<j) )
{
mu = vis[j]/gcd(mu,vis[j])*mu;
if( mu > n ) break;
ones++;
}
if( mu > n ) continue;
if( ones%2==1) sum += n/mu;
else sum -= n/mu;
}
printf("%d\n",n-sum);
}
return 0;
}
相关文章推荐
- Javascript SHA-1:Secure Hash Algorithm
- [转]可视化的数据结构和算法
- 统计文件中不小于某一长度的单词的个数(泛型算法实现)
- 使用他人的MD5编码类,修改形成密码串
- Extracting Structured Data from Web Pages
- (译)Cocos2d_for_iPhone_1_Game_Development_Cookbook:1.13使用CCTexture2DMutable调换调色盘
- Java中3DES加密
- Refactoring Notes-Refactoring Methods(3)
- 图书馆管理程序~~不过貌似功能!!有空再修修
- trainging contest#2(2011成都现场赛)I BY Hyoga
- C/C++头文件包含内容概览
- 堆栈的应用(1) 平衡符号 C++实现
- 程序员编程艺术第一章、左旋转字符串
- 程序员编程艺术:第三章续、Top K算法问题的实现
- 程序员编程艺术:第四章、现场编写类似strstr/strcpy/strpbrk的函数
- 十四、第三章再续:快速选择SELECT算法的深入分析与实现
- 程序员编程艺术:第七章、求连续子数组的最大和
- 程序员编程艺术:第八章、从头至尾漫谈虚函数
- 程序员编程艺术:第九章、闲话链表追赶问题
- 程序员编程艺术:第十章、如何给10^7个数据量的磁盘文件排序