题意: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 (简单容斥原理)的更多相关文章

  1. ural 1091. Tmutarakan Exams(容斥原理)

    1091. Tmutarakan Exams Time limit: 1.0 secondMemory limit: 64 MB University of New Tmutarakan trains ...

  2. Ural 1091 Tmutarakan Exams

    Tmutarakan Exams Time Limit: 1000ms Memory Limit: 16384KB This problem will be judged on Ural. Origi ...

  3. 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 ...

  4. ural 1091. Tmutarakan Exams(容斥)

    http://acm.timus.ru/problem.aspx? space=1&num=1091 从1~s中选出k个数,使得k个数的最大公约数大于1,问这种取法有多少种. (2<=k ...

  5. 1091. Tmutarakan Exams

    1091. Tmutarakan Exams Time limit: 1.0 secondMemory limit: 64 MB University of New Tmutarakan trains ...

  6. 容斥原理--计算并集的元素个数 URAL 1091

    在计数时,必须注意没有重复,没有遗漏.为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计 ...

  7. F - Tmutarakan Exams URAL - 1091 -莫比乌斯函数-容斥 or DP计数

    F - Tmutarakan Exams 题意 : 从 < = S 的 数 中 选 出 K 个 不 同 的 数 并 且 gcd > 1 .求方案数. 思路 :记 录 一 下 每 个 数 的 ...

  8. 2014 Super Training #3 H Tmutarakan Exams --容斥原理

    原题: URAL 1091  http://acm.timus.ru/problem.aspx?space=1&num=1091 题意:要求找出K个不同的数字使他们有一个大于1的公约数,且所有 ...

  9. Tmutarakan Exams URAL - 1091(莫比乌斯函数 || 容斥)

    题意: 求1 - s 中 找出k个数 使它们的gcd  > 1 求这样的k个数的对数 解析: 从每个素数的倍数中取k个数  求方案数 然后素数组合,容斥一下重的 奇加偶减 莫比乌斯函数的直接套模 ...

随机推荐

  1. hdu 1147:Pick-up sticks(基本题,判断两线段相交)

    Pick-up sticks Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  2. eclipse中打开含有汉字的properties文件显示乱码

    http://blog.csdn.net/wangjun5159/article/details/46965831

  3. Laravel5.1 搭建博客 --上传文件及文件管理

    教程源自:Laravel学院 这一节 咱来说说上传文件的功能实现,我们会把上传的文件保存到项目本地,不仅上传 还有删除和预览功能. 1 配置 我们先从配置开始做起,先修改我们自己创建的 blog.ph ...

  4. AWS系列-EC2实例添加磁盘

    注意:添加的磁盘,必须和挂载的实例是在同一可用区. 1.1 如下图,打开EC2控制台,打开卷,点击创建卷 1.2 选择磁盘配置 磁盘类型:如下图 磁盘大小:如图,最小500G,最大16T 可用区:注意 ...

  5. Objective-C代码学习大纲(5)

    2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍了Objective-C代码,很多名词为台 ...

  6. window 发布已编译好的ASP文件到IIS

    1.进入window 7的控制面板,点击程序,选择程序和功能中的 打开或关闭Windows功能.安装IIS

  7. PAT 1026 Table Tennis (30)

    A table tennis club has N tables available to the public. The tables are numbered from 1 to N. For a ...

  8. fiddler弱网测试

    模拟低速网路环境…启用方法如下: Rules → Performances → Simulate Modem Speeds (如下图)· 勾选之后,你会发现你的网路瞬间慢超多… (想当年国中时我们的网 ...

  9. wampserver环境搭建

    一.进入wampserver官网下载:http://www.wampserver.com/ 下载对应电脑相应版本的wamp程序(比如电脑是64位系统的就下载对应的64位的) 二.安装(直接点击exe文 ...

  10. HTML 之轮播图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...