题目

https://www.luogu.com.cn/problem/P4562

沉迷水题无法自拔(感觉校赛要大寄特寄qwq)

思路

可以fa现可怜的检查和员工的通风报信类似一个筛法的过程,当区间中所有的数都被筛到至少一遍时,这个过程就结束了。

然后我们考虑什么情况下区间会被筛完。简单分析一下可知,对于\(a\in [l,r]\),如果\(\exists b\neq a,b\in [l,r]\) 使得 \(b|a\) ,那么\(a\)对筛是没有贡献的,相当于没有筛。

因为\(a\)能筛到的\(b\)都能筛到,而且\(b\)必须筛一遍以保证它本身被筛到。

所以我们可以定义关键数:区间内不存在它的因数。于是\(t(p)=n\)意味着在排列的前n个数中,所有的关键数都出现了(满足n最小)。

所以在找出所有关键数之后,我们可以枚举最后一个关键数出现的位置,写出一个式子(假设一共有\(s\)个关键数,区间长度为\(n=r-l+1\)):

\[s!*(n-s)!\sum_{k=1}^{n} k*\tbinom{k-1}{s-1}
\]

前面是个常量,我们关注和式。

这个东西用生成函数求导的方法当然很套路,但是如果没有学过生成函数也没关系,我们有\(k\tbinom{k-1}{s-1}=s\tbinom{k}{s}\),把\(s\)提出去就是一个平行求和。

不管用什么方式,我们都可以得到\(s\tbinom{n+1}{s+1}\) 这个式子。

所以最终答案就是

\[s!*(n-s)!*s*\tbinom{n+1}{s+1}
\]

尽管算法时间复杂度的瓶颈并不在这里,但是有了封闭形式的结果总是令人愉快的 ⊂(‘ω’⊂ )))

然后我们考虑如何计算这个\(s\)。之前说过所谓的关键数满足:区间内不存在它的因数,这个性质与质数有几分相似,这启发我们,是不是只要对筛法进行一些魔改就能成功呢?

然后我们试着改一下欧拉筛。

然后我们就AC了(雾)。

代码

点击查看代码
#include<cstdio>
#include<cstdlib>
#define maxn (int)(1e7+10)
#define mod ((int)(1e9+7))
#define ll long long
using namespace std;
int l,r,book[maxn],p[maxn],cnt=0;
int f[maxn];
ll fac[maxn];
ll qpow(ll x,int p){
ll ans=1,base=x;
for(;p;p>>=1){
if(p&1) ans=ans*base%mod;
base=base*base%mod;
}
return ans;
}
ll inv(ll x){
return qpow(x,mod-2);
}
ll C(int n,int m){
return fac[n]*inv(fac[m])%mod*inv(fac[n-m])%mod;
}
int main(){
int i,j,n,m,sum=0;
ll ans=0;
scanf("%d%d",&l,&r);
if(l==1){
for(i=1;i<=r;++i) ans=(ans+i)%mod;
for(i=1;i<r;++i) ans=ans*i%mod;
printf("%lld",ans);
return 0;
}
for(i=2;i<=r;++i){
if(!book[i]) p[++cnt]=i;
for(j=1;j<=cnt&&p[j]<=r/i;++j){
book[i*p[j]]=1;
if(!(i%p[j])) break;
}
}
for(i=l;i<=r;++i){
if(!f[i]) sum++;
for(j=1;j<=cnt&&p[j]<=r/i;++j){
f[i*p[j]]=1;
if(!(i%p[j])) break;
}
}
n=r-l+1;
fac[0]=1;
for(i=1;i<=n+1;++i) fac[i]=fac[i-1]*i%mod;
ans=sum*C(n+1,sum+1)%mod;
// for(i=sum;i<=n;++i){
// ans+=i*C(i-1,sum-1);
// }
ans=ans*fac[n-sum]%mod*fac[sum]%mod;
printf("%lld",ans);
// system("pause");
return 0;
}

洛谷P4562 [JXOI2018]游戏的更多相关文章

  1. 洛谷P4562 [JXOI2018]游戏(组合数学)

    题意 题目链接 Sol 这个题就比较休闲了. \(t(p)\)显然等于最后一个没有约数的数的位置,那么我们可以去枚举一下. 设没有约数的数的个数有\(cnt\)个 因此总的方案为\(\sum_{i=c ...

  2. 洛谷P4562 [JXOI2018]游戏 数论

    正解:数论 解题报告: 传送门! 首先考虑怎么样的数可能出现在t(i)那个位置上?显然是[l,r]中所有无法被表示出来的数(就约数不在[l,r]内的数嘛QwQ 所以可以先把这些数筛出来 具体怎么筛的话 ...

  3. 洛谷 P2197 nim游戏

    洛谷 P2197 nim游戏 题目描述 甲,乙两个人玩Nim取石子游戏. nim游戏的规则是这样的:地上有n堆石子(每堆石子数量小于10000),每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取 ...

  4. 洛谷 P1965 转圈游戏

    洛谷 P1965 转圈游戏 传送门 思路 每一轮第 0 号位置上的小伙伴顺时针走到第 m 号位置,第 1 号位置小伙伴走到第 m+1 号位置,--,依此类推,第n − m号位置上的小伙伴走到第 0 号 ...

  5. 洛谷 P1000 超级玛丽游戏

    P1000 超级玛丽游戏 题目背景 本题是洛谷的试机题目,可以帮助了解洛谷的使用. 建议完成本题目后继续尝试P1001.P1008. 题目描述 超级玛丽是一个非常经典的游戏.请你用字符画的形式输出超级 ...

  6. 【流水调度问题】【邻项交换对比】【Johnson法则】洛谷P1080国王游戏/P1248加工生产调度/P2123皇后游戏/P1541爬山

    前提说明,因为我比较菜,关于理论性的证明大部分是搬来其他大佬的,相应地方有注明. 我自己写的部分换颜色来便于区分. 邻项交换对比是求一定条件下的最优排序的思想(个人理解).这部分最近做了一些题,就一起 ...

  7. $loj10156/$洛谷$2016$ 战略游戏 树形$DP$

    洛谷loj Desription Bob 喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的方法.现在他有个问题. 现在他有座古城堡,古城堡的路形成一棵树.他要在这棵树的节点上放置最少数 ...

  8. 洛谷P1000 超级玛丽游戏(洛谷新手村1-1-1)

    题目背景 本题是洛谷的试机题目,可以帮助了解洛谷的使用. 建议完成本题目后继续尝试P1001.P1008. 题目描述 超级玛丽是一个非常经典的游戏.请你用字符画的形式输出超级玛丽中的一个场景. *** ...

  9. 洛谷P1080 国王游戏 python解法 - 高精 贪心 排序

    洛谷的题目实在是裹脚布 还编的像童话 这题要 "使得获得奖赏最多的大臣,所获奖赏尽可能的少." 看了半天都觉得不像人话 总算理解后 简单说题目的意思就是 根据既定的运算规则 如何排 ...

  10. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

随机推荐

  1. CLIP 读书笔记

    论文:Learning Transferable Visual Models From Natural Language Supervision CLIP: Contrastive Language- ...

  2. java ArrayList 原理

    概述 底层通过数组实现,所以 查询/更新效率很高,删除/增加跟位置相关,除未实现同步外和 Vector 大致相同 自动扩容,每次扩容大概 1.5 倍,扩容代价比较高尽量避免 实现了 RandomAcc ...

  3. 人眼对led灯的闪烁识别度:写单片机的时候,小于15ms,我们人眼视为常亮

    人眼对于每11毫秒闪烁一次约83赫兹基本感觉不到,每15毫秒闪烁一次约66赫兹轻微频闪. 所以写单片机的时候,小于15ms,我们人眼视为常亮

  4. python函数传参是传值还是指针

    python中,往函数传参传的是指针,并非传值. 代码说话 如果改变函数参数的值,我们来看看改变: 但是如果是传的列表这种可变数据类型呢 传列表并没有发送改变,仍然指向的是原来的地址. 这是因为传的数 ...

  5. 看不见的的html

    1.  meta标签自动刷新/跳转 实现定时跳转功能:除了设置定时器外  可以 <meta http-equiv="Refresh" content="5" ...

  6. QDir类和方法应用

    QDir类提供了访问系统目录结构及其内容的与平台无关的方式. 头文件:#include <qdir.h> QDir类用来操作路径名及底层文件系统,获取关于目录路径及文件的相关信息,也可以用 ...

  7. 有道翻译-JS逆向-api调用

    简单方法 -调用开源api 这个比较简单四行代码就可以搞定,先放代码: 1 import requests 2 while True: 3 input_data = input('请输入你要翻译的数据 ...

  8. FTP主动模式(Port)和被动模式(Passive)的区别

    1.FTP的PORT(主动模式): PORT中文称为主动模式,工作的原理: FTP客户端(1024以上端口)连接到FTP服务器的21端口,发送用户名和密码登录, 登录成功后要list列表或者读取数据时 ...

  9. Kubernetes二进制安装

    目录: 操作系统初始化配置 部署docker引擎 部署etcd集群 准备签发证书环境 部署Master组件 部署Worker Node组件 部署CNI网络组件 部署flannel 部署Calico 部 ...

  10. 解决不了ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing啊

    我今天真的好难受,在我结束hbase的配置的后,又是成功运行了shell命令,我以为万事大吉,结果下午再用shell命令时,给我报了这个错,我按着网上说的删了点东西,还是解决不了,难受啊. 我现在时决 ...