ural 1091. Tmutarakan Exams(容斥)
http://acm.timus.ru/problem.aspx?
space=1&num=1091
从1~s中选出k个数,使得k个数的最大公约数大于1,问这种取法有多少种。
(2<=k <= s<=50)
同素数四元组问题类似,能够參考http://blog.csdn.net/u013081425/article/details/40653895
仅仅只是这里是选出k个。不是4个。
#include <stdio.h>
#include <iostream>
#include <map>
#include <set>
#include <bitset>
#include <list>
#include <stack>
#include <vector>
#include <math.h>
#include <string.h>
#include <queue>
#include <string>
#include <stdlib.h>
#include <algorithm>
#define LL __int64
//#define LL long long
#define eps 1e-9
#define PI acos(-1.0)
using namespace std;
const int maxn = 100010; int k,s;
int num[55];
int prime[] = {15,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47};
int cnt[55];
LL c[55][55]; void init()
{
memset(c,0,sizeof(c));
for(int i = 1; i <= 25; i++)
{
for(int j = 0; j <= i; j++)
{
if(j == 0 || j == i)
c[i][j] = 1;
else if(j == 1)
c[i][j] = i;
else
c[i][j] = c[i-1][j-1] + c[i-1][j];
}
}
} void dfs(int st, int val, int num)
{
if(val > 50) return;
cnt[val] = num&1 ? 1 : -1;
for(int i = st; i <= prime[0]; i++)
{
if(prime[i]*val > 50)
break;
dfs(i+1,val*prime[i],num+1);
}
} int main()
{
init();
memset(cnt,0,sizeof(cnt));
dfs(1,1,0);
while(~scanf("%d %d",&k,&s))
{
for(int d = 2; d <= s; d++)
{
num[d] = s/d;
} LL ans = 0; for(int d = 2; d <= s; d++)
{
if(num[d] < k)
break;
if(cnt[d])
{
ans += cnt[d]*c[num[d]][k];
}
}
if(ans >= 10000)
printf("10000\n");
else
printf("%I64d\n",ans);
}
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 ...
- F - Tmutarakan Exams URAL - 1091 -莫比乌斯函数-容斥 or DP计数
F - Tmutarakan Exams 题意 : 从 < = S 的 数 中 选 出 K 个 不 同 的 数 并 且 gcd > 1 .求方案数. 思路 :记 录 一 下 每 个 数 的 ...
- 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 (简单容斥原理)
题意:K个不同数组成的集合,每个数都不超过S且它们的gcd>1.求这样的数的个数 分析:从2开始枚举gcd,但这样会发生重复.譬如,枚举gcd=2的集合个数和gcd=3的集合个数,枚举6的时候就 ...
- URAL1091. Tmutarakan Exams(容斥)
1091 容斥原理 #include <iostream> #include<cstdio> #include<cstring> #include<algor ...
- 1091. Tmutarakan Exams
1091. Tmutarakan Exams Time limit: 1.0 secondMemory limit: 64 MB University of New Tmutarakan trains ...
- 容斥原理--计算并集的元素个数 URAL 1091
在计数时,必须注意没有重复,没有遗漏.为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计 ...
- Tmutarakan Exams URAL - 1091(莫比乌斯函数 || 容斥)
题意: 求1 - s 中 找出k个数 使它们的gcd > 1 求这样的k个数的对数 解析: 从每个素数的倍数中取k个数 求方案数 然后素数组合,容斥一下重的 奇加偶减 莫比乌斯函数的直接套模 ...
随机推荐
- javascript简写精练
一.算术运算符 var n = 5,v; 1.n = n*5; 2.n*=5; 同 n = n*5 二.条件判断 var b = true; 1.if (!false) { alert('true') ...
- 数据库同步相关的SQL语句
一.目标: 本文重点给大家介绍几款SQL用法,一般常用于数据库同步之类的. 二.例子: 1.找出A表中不存在于B表的记录. from B where A.[序号]=B.[序号]); 2.将A表中不存在 ...
- SLF4J warning or error messages and their meanings
来自:http://www.slf4j.org/codes.html#StaticLoggerBinder The method o.a.commons.logging.impl.SLF4FLogFa ...
- Aerospike系列:1:安装
1:下载源文件 wget http://www.aerospike.com/artifacts/aerospike-server-community/3.5.9/aerospike-server-co ...
- Android 使用DDMS查看内存使用情况
- 写带有清晰图片的博客:如何将word中的图片复制到windows live writer保持大小不变--清晰度不变
写blog的习惯,先在word写了,复制到windows live writer,再发布到博客园.word中的文章,图片有缩放比例,复制到windows live writer后图片变得不清晰.除了一 ...
- Double-check idiom for lazy initialization of instance fields
- 〖Linux〗Ubuntu设定Proxy及忽略Proxy
1. 设定代理:. ~/.proxyenv #!/bin/sh # for terminal export proxyserveraddr=123.123.123.123 export proxyse ...
- 利用WatchService监听文件变化
在实现配置中心的多种方案中,有基于JDK7+的WatchService方法,其在单机应用中还是挺有实践的意义的. 代码如下: package com.longge.mytest; import jav ...
- Excel Vlookup 列查找函数
列查找函数语法:vlookup(lookup_value,table_array,col_index_num,[range_lookup]) lookup_value:要查找的值,数值.引用或文本字符 ...