传送门

这是我见过的为数不多的良心九怜题之一。

题目大意

有一堆屋子,编号为$l,l+1...r-1,r$,你每次会走入一个没走入过的房子,然后这个房子以及编号为这个房子编号的倍数的房子就会被自动标记,对于每一种走入房子顺序的排列,对答案的贡献是最早使得所有房子都被标记的操作数,求所有排列对答案的贡献和。$1\leq l,r\leq 10^7$

题解

设$n=r-l+1$不难发现,有意义的走入只有$m$次($m$表示$[l,r]$内没有因数$\in[l,r]$的数的数量)。

每种排列对答案的贡献是这$m$个中最后一个被就走入的操作。

枚举最后一个被走入的时间$k$,则需要在前$k-1$个操作中安排$m-1$个位置,由于$m$个有意义操作和$n-m$个无意义操作内部的顺序是无所谓的,所以答案就是$$m!(n-m)!\sum\limits_{k=m}^{n}\dbinom{k-1}{m-1}$$。

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define mod 1000000007
#define M 10000020
using namespace std;
int read(){
int nm=0,fh=1; char cw=getchar();
for(;!isdigit(cw);cw=getchar()) if(cw=='-') fh=-fh;
for(;isdigit(cw);cw=getchar()) nm=nm*10+(cw-'0');
return nm*fh;
}
int add(int x,int y){return (x+y>=mod)?x+y-mod:x+y;}
int mul(int x,int y){return (LL)x*(LL)y%mod;}
int L,R,n,m,fac[M],ifac[M],ans; bool vis[M];
int qpow(int x,int sq){
int res=1;
for(;sq;sq>>=1,x=mul(x,x)) if(sq&1) res=mul(res,x);
return res;
}
int C(int tot,int tk){return mul(fac[tot],mul(ifac[tk],ifac[tot-tk]));}
int main(){
L=read(),R=read(),n=R-L+1,fac[0]=1;
for(int i=1;i<=n;i++) fac[i]=mul(fac[i-1],i); ifac[n]=qpow(fac[n],mod-2);
for(int i=n;i>0;i--) ifac[i-1]=mul(ifac[i],i);
for(int i=L;i<=R;i++){
if(vis[i]) continue; m++;
for(int j=(i<<1);j<=R;j+=i) vis[j]=true;
}
for(int i=m;i<=n;i++) ans=add(ans,mul(i,C(i-1,m-1)));
printf("%d\n",mul(mul(fac[m],fac[n-m]),ans)); return 0;
}

最新文章

  1. make 查找的文件名顺序为:“GNUmakefile”、“makefile”、“Makefile”
  2. Webform server.transfer 用法
  3. ie7下&lt;a&gt;&lt;/a&gt;标签不反应
  4. leetcode 153. Find Minimum in Rotated Sorted Array
  5. Uncaught TypeError: _react2.default.findDOMNode is not a function
  6. Netdom query基本用法
  7. WinAPI——钩子函数大全2
  8. HDU 5934 Bomb 【图论缩点】(2016年中国大学生程序设计竞赛(杭州))
  9. BZOJ2697: 特技飞行
  10. 正则表达式,Regex类
  11. Linux系统编程(22)——响应信号
  12. QT 线程池 + TCP 小试(一)线程池的简单实现
  13. Eclipse常见操作
  14. ADB安装及使用
  15. hdu-6035 Colorful Tree
  16. HDU2021发工资咯:)
  17. File file = new File(&quot;路径名&quot;) 路径名的2种写法
  18. 动态创建控件 #Create(...)
  19. 标签a点击以后,5秒内禁止点击,5秒后激活
  20. Ceph块存储介绍

热门文章

  1. PHP-Manual的学习----【语言参考】----【类型】-----【float浮点型】
  2. vim对光标所在的数字进行增减
  3. 我的Android进阶之旅------>Android嵌入图像InsetDrawable的用法
  4. centos 安装 jdk PostgreSQL
  5. xpath中如何使用变量
  6. spark的若干问题
  7. python selenium cookie 登录
  8. Data Structure Binary Tree: Boundary Traversal of binary tree
  9. zabbix实现mysql数据库的监控(三)
  10. &lt;轻量算法&gt;根据核密度估计检测波峰算法 ---基于有限状态自动机和递归实现