1091

容斥原理

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<vector>
using namespace std;
int p[],g,f[],q[],o,vis[],pa[],n,kk;
#define LL long long
void init()
{
int i,j;
for(i = ; i < ; i++)
if(!f[i])
for(j = i+i ; j < ; j+=i)
f[j] = ;
for(i = ; i < ; i++)
if(!f[i])
p[++g] = i;
}
LL find(int num,int k)
{
if(num<k) return ;
int i,x=k;
LL s = ;
for(i = ; i <= k ; i++)
{
s*=num;
num--;
while(x>&&s%x==)
{
s/=x;
x--;
}
}
return s;
}
LL dfs(int k,int v,int a)
{
int i,j;
LL s=;
if(a==o+&&v==k)
{
for(i = ; i <= n ; i++)
{
for(j = ; j <= v ; j++)
if(i%pa[j]!=)
break;
if(j==v+)
s++;
}
s = find(s,kk);
return s;
}
if(a>o) return ;
pa[v+] = p[a];
s+=dfs(k,v+,a+);
s+=dfs(k,v,a+);
return s;
}
int main()
{
int i,j;
init();
cin>>kk>>n;
LL s=;
for(i = ; i <= g ; i++)
{
int num = ;
for(j = ; j <= n ; j++)
if(j%p[i]==)
num++;
if(num<kk) continue;
q[++o] = p[i];
s+=find(num,kk);
}
for(i = ; i <= o ; i++)
{
memset(vis,,sizeof(vis));
LL pp=dfs(i,,);
if(i%==)
s-=pp;
else
s+=pp;
}
if(s>=)
cout<<""<<endl;
else
cout<<s<<endl;
return ;
}

最新文章

  1. WCF Security(转载)
  2. JDSideMenu实现(整块)侧滑功能,主视图会和状态栏(StatusBar)会一起滑动。
  3. 基于Bootstrap的jQuery开关按钮插件
  4. Bulk Insert &amp; BCP执行效率对比(续)
  5. 开源数据库连接池proxool
  6. 从零开始学android开发-adt-bundle-eclipse下的修改android app名称
  7. 【原】Storm配置
  8. angularjs学习笔记三——directive
  9. 【MFC学习笔记-作业9-基于单击响应的计算平均成绩】【】
  10. Referrer 还是 Referer?
  11. BZOJ-1192-[HNOI2006]鬼谷子的钱袋
  12. 使用责任链模式消除if分支实践
  13. 项目工程中的WebRoot与WebContent有什么区别?
  14. rem自适应
  15. 洛谷P2178 品酒大会
  16. MacOS下netstat和lsof使用的若干问题
  17. 三、OPENERP 中的对象关系类型
  18. 一款基于jQuery外观优雅带遮罩弹出层对话框
  19. onerror=&quot;javascript:this.src=&#39;images/defaultUpload.png&#39;;&quot;【容易导致死循环报错】
  20. c#中的引用类型和值类型

热门文章

  1. [百度空间] [原]MFC杂乱笔记
  2. 9 I/O复用
  3. 疯狂java讲义——继承
  4. Android 添加Button事件
  5. NGUI 实现 透明底图遮罩 &amp;&amp; 人物像素变黑
  6. CSS3中的网格
  7. ZOJ3718 Diablo II(状态压缩dp)
  8. UVA 11610 Reverse Prime (数论+树状数组+二分,难题)
  9. 机器学习之神经网络模型-下(Neural Networks: Representation)
  10. C语言关键字