URAL - 1091 Tmutarakan Exams (简单容斥原理)
题意:K个不同数组成的集合,每个数都不超过S且它们的gcd>1。求这样的数的个数
分析:从2开始枚举gcd,但这样会发生重复。譬如,枚举gcd=2的集合个数和gcd=3的集合个数,枚举6的时候就重复了,所以对于6,10这种质因子个数为2的,要减去。而对于4,8,9这样同一质因子出现超过1次的,不用考虑(相当于莫比乌斯函数值为0)。
因为K和S不大,先预处理出组合数以及每个数对应的质因子个数。然后按容斥计算答案。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 55;
int C[maxn][maxn];
int cnt[maxn];
bool isprime(int n)
{
if(n<2) return false;
for(int i=2;i*i<=n;++i){
if(n%i==0) return false;
}
return true;
}
void pre()
{
for(int i=2;i<maxn;++i){
if(isprime(i)){
cnt[i]=1;
}else{
int tmp = i;
for(int j=2;j*j<=tmp;++j){
if(tmp%j==0){
int t = 0;
while(tmp%j==0) tmp/=j,t++;
if(t>1){ //莫比乌斯函数值为0,不必考虑
cnt[i] = 0;
break;
}
cnt[i]++;
}
}
if(cnt[i]==0) continue;
if(tmp>1) cnt[i]++;
}
}
C[1][0] = C[1][1] = 1;
for(int i=2;i<maxn;++i){
C[i][0] = 1;
for(int j=1;j<=i;++j){
C[i][j] = C[i-1][j]+C[i-1][j-1];
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
pre();
int K,S;
while(scanf("%d %d",&K, &S)==2){ //枚举公约数
int res=0;
for(int i=2;i<=S;++i){
if(!cnt[i]) continue;
int num = S/i;
int tmp = C[num][K];
if(cnt[i]&1) res += tmp;
else res -= tmp;
}
if(res>10000) res=10000;
printf("%d\n",res);
}
return 0;
}
URAL - 1091 Tmutarakan Exams (简单容斥原理)的更多相关文章
- ural 1091. Tmutarakan Exams(容斥原理)
1091. Tmutarakan Exams Time limit: 1.0 secondMemory limit: 64 MB University of New Tmutarakan trains ...
- Ural 1091 Tmutarakan Exams
Tmutarakan Exams Time Limit: 1000ms Memory Limit: 16384KB This problem will be judged on Ural. Origi ...
- ural 1091. Tmutarakan Exams 和 codeforces 295 B. Greg and Graph
ural 1091 题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1091 题意是从1到n的集合里选出k个数,使得这些数满足gcd大于1 ...
- ural 1091. Tmutarakan Exams(容斥)
http://acm.timus.ru/problem.aspx? space=1&num=1091 从1~s中选出k个数,使得k个数的最大公约数大于1,问这种取法有多少种. (2<=k ...
- 1091. Tmutarakan Exams
1091. Tmutarakan Exams Time limit: 1.0 secondMemory limit: 64 MB University of New Tmutarakan trains ...
- 容斥原理--计算并集的元素个数 URAL 1091
在计数时,必须注意没有重复,没有遗漏.为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计 ...
- F - Tmutarakan Exams URAL - 1091 -莫比乌斯函数-容斥 or DP计数
F - Tmutarakan Exams 题意 : 从 < = S 的 数 中 选 出 K 个 不 同 的 数 并 且 gcd > 1 .求方案数. 思路 :记 录 一 下 每 个 数 的 ...
- 2014 Super Training #3 H Tmutarakan Exams --容斥原理
原题: URAL 1091 http://acm.timus.ru/problem.aspx?space=1&num=1091 题意:要求找出K个不同的数字使他们有一个大于1的公约数,且所有 ...
- Tmutarakan Exams URAL - 1091(莫比乌斯函数 || 容斥)
题意: 求1 - s 中 找出k个数 使它们的gcd > 1 求这样的k个数的对数 解析: 从每个素数的倍数中取k个数 求方案数 然后素数组合,容斥一下重的 奇加偶减 莫比乌斯函数的直接套模 ...
随机推荐
- [ASK] brew install nginx
.......... .......... Error: Permission denied - /usr/local/etc/openssl .......... .......... Cannot ...
- html转pdf工具:wkhtmltopdf.exe
百度云下载:http://pan.baidu.com/s/1dEX0h93
- Hibernate_day02--课程安排_主键生成策略_对实体类crud操作_实体类对象状态
Hibernate_day02 上节内容 今天内容 实体类编写规则 Hibernate主键生成策略 实体类操作 对实体类crud操作 添加操作 根据id查询 修改操作 删除操作 实体类对象状态(概念) ...
- iOS开发之 -- bundle程序束的制造
我们在写项目的时候,需要添加大量的图片,这个时候除了在x-code-->Assets文件里面添加图片外,还可以添加程序束,这样的话 项目看起来比较整齐,也显得比较专业,下面就来说一下程序束的制造 ...
- iOS开发之--png图片编译时报错 (Command /Applications/Xcode.app/Contents/Developer/usr/bin/copypng failed with exit code 1 )
编译或者运行APP的时候,老是报这个错误:Command /Applications/Xcode.app/Contents/Developer/usr/bin/copypng failed with ...
- Qt 等待一段时间例如1s
QTime dieTime = QTime::currentTime().addMSecs(1000); while( QTime::currentTime() < dieTime ) QCor ...
- [Gradle] 针对不同的项目类型应用不同的 findbugs 配置
build.gradle in project root subprojects { subProject -> plugins.withId('com.android.application' ...
- Maven 构建Spring-Boot工程报错
Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.5.6.RELEASE:repackage ...
- 170323、Spring 事物机制总结
spring两种事物处理机制,一是声明式事物,二是编程式事物 声明式事物 1)Spring的声明式事务管理在底层是建立在AOP的基础之上的.其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加 ...
- Sass之二(进阶篇)
源码链接:http://pan.baidu.com/s/1o8M51hC 1. 数据类型 1.1 Number 数字类型,小数类型,带有像素单位的数字类型,全部都属于Number类型 Number类型 ...