luogu P4562 [JXOI2018]游戏 组合数学
LINK:游戏
当L==1的时候 容易想到 答案和1的位置有关。
枚举1的位置 那么剩下的方案为(R-1)! 那么总答案为 (R+1)*R/2(R-1)!
考虑L==2的时候 对于一个排列什么时候会终止 容易发现是L~R中所有的质数 在这个排列中的最后一个位置的影响。
还是枚举这个质数的位置i 此时方案数为 C(i-1,s-1)s!(n-s)!
其中s为L~R之中所有的质数个数.
对于L>2 还是考虑先计算出s的个数 刚才是使用了线性筛 此时考虑 质数不能用了 那么可以考虑每个数是否为必要的数。
那么我们从前往后推 只需要知道离自己最近的数是谁 看一下上一个是不是就能判断当前了。
可以发现要除以一下自己的最小质因子。所以线性筛可以解决。
当然可以直接埃拉筛。统计没被筛到的数字个数即可。复杂度nloglogn
这里使用前者.
const int MAXN=10000010,maxn=110,G=3;
int fac[MAXN],inv[MAXN];
int v[MAXN],p[MAXN];
int L,R;
int cnt,top;
inline int ksm(int b,int p)
{
int cnt=1;
while(p)
{
if(p&1)cnt=(ll)cnt*b%mod;
b=(ll)b*b%mod;p=p>>1;
}
return cnt;
}
inline void prepare()
{
fac[0]=fac[1]=1;
rep(2,R,i)
{
fac[i]=(ll)fac[i-1]*i%mod;
if(!v[i])
{
v[i]=i;
p[++top]=i;
if(i>=L)++cnt;
}
rep(1,top,j)
{
if(p[j]>R/i)break;
int ww=i*p[j];
v[ww]=p[j];
if(i<L&&ww>=L)++cnt;
if(v[i]==p[j])break;
}
}
}
inline int C(int a,int b){if(a<b)return 0;return (ll)fac[a]*inv[b]%mod*inv[a-b]%mod;}
int main()
{
freopen("1.in","r",stdin);
get(L);get(R);
prepare();
if(L==1)put((ll)(1+R)*R/2%mod*fac[R-1]%mod);
else
{
inv[R]=ksm(fac[R],mod-2);
fep(R-1,0,i)inv[i]=(ll)inv[i+1]*(i+1)%mod;
int n=R-L+1;
int ans=0;
rep(cnt,n,i)ans=(ans+(ll)C(i-1,cnt-1)*fac[cnt]%mod*fac[n-cnt]%mod*i%mod)%mod;
put(ans);
}
return 0;
}
luogu P4562 [JXOI2018]游戏 组合数学的更多相关文章
- 洛谷P4562 [JXOI2018]游戏(组合数学)
题意 题目链接 Sol 这个题就比较休闲了. \(t(p)\)显然等于最后一个没有约数的数的位置,那么我们可以去枚举一下. 设没有约数的数的个数有\(cnt\)个 因此总的方案为\(\sum_{i=c ...
- Luogu P4562 [JXOI2018]游戏
题目 我们用埃氏筛从\(l,r\)筛一遍,每次把没有被筛掉的数的倍数筛掉. 易知最后剩下来的数(这个集合记为\(S\))的个数就是我们需要选的数,设有\(s\)个,令\(n=r-l+1\). 记\(f ...
- P4562 [JXOI2018]游戏
题面 题目描述 她长大以后创业了,开了一个公司. 但是管理公司是一个很累人的活,员工们经常背着可怜偷懒,可怜需要时不时对办公室进行检查. 可怜公司有 \(n\) 个办公室,办公室编号是 \(l\) 到 ...
- 洛谷P4562 [JXOI2018]游戏 数论
正解:数论 解题报告: 传送门! 首先考虑怎么样的数可能出现在t(i)那个位置上?显然是[l,r]中所有无法被表示出来的数(就约数不在[l,r]内的数嘛QwQ 所以可以先把这些数筛出来 具体怎么筛的话 ...
- 【BZOJ5323】[JXOI2018]游戏(组合计数,线性筛)
[BZOJ5323][JXOI2018]游戏(组合计数,线性筛) 题面 BZOJ 洛谷 题解 显然要考虑的位置只有那些在\([l,r]\)中不存在任意一个约数的数. 假设这样的数有\(x\)个,那么剩 ...
- [JXOI2018]游戏 (线性筛,数论)
[JXOI2018]游戏 \(solution:\) 这一道题的原版题面实在太负能量了,所以用了修改版题面. 这道题只要仔细读题,我们就可以将题目的一些基本性质分析出来:首先我们定义:对于某一类都可以 ...
- [luogu]P1070 道路游戏[DP]
[luogu]P1070 道路游戏 题目描述小新正在玩一个简单的电脑游戏.游戏中有一条环形马路,马路上有 n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针 ...
- [Luogu P3825] [NOI2017] 游戏 (2-SAT)
[Luogu P3825] [NOI2017] 游戏 (2-SAT) 题面 题面较长,略 分析 看到这些约束,应该想到这是类似2-SAT的问题.但是x地图很麻烦,因为k-SAT问题在k>2的时候 ...
- 【题解】JXOI2018游戏(组合数)
[题解]JXOI2018游戏(组合数) 题目大意 对于\([l,r]\)中的数,你有一种操作,就是删除一个数及其所有倍数.问你删除所有数的所有方案的步数之和. 由于这里是简化题意,有一个东西没有提到: ...
随机推荐
- python 实现汉诺塔
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘. 大梵天命令婆罗门把圆盘从下面开始按大小顺 ...
- Flask-实现下载功能
1. 接口返回真实的文件 这种情况比较简单, flask里带有此类api, 可以用send_from_directory和send_file. 核心代码如下: from flask import se ...
- MyBatis-Plus 用起来真的很舒服
一.MyBatis-Plus 1.简介 MyBatis-Plus 是一个 Mybatis 增强版工具,在 MyBatis 上扩充了其他功能没有改变其基本功能,为了简化开发提交效率而存在. 官网文档地址 ...
- day17 作业
目录 一.编写函数(函数执行的时间用time.sleep(n)模拟) 二.编写装饰器,为函数加上统计时间的功能 三.编写装饰器,为函数加上认证的功能 四.编写装饰器,为多个函数加上认证的功能(用户的账 ...
- 微信支付之获取code
微信支付之获取code, 1:访问下面的连接(自己拼) 2:去回调地址里拿code https://open.weixin.qq.com/connect/oauth2/authorize?appid= ...
- java 面向对象(二十七):注解的使用
1. 注解的理解① jdk 5.0 新增的功能*② Annotation 其实就是代码里的特殊标记, 这些标记可以在编译, 类加载, 运行时被读取, 并执行相应的处理.通过使用 Annotation, ...
- 机器学习实战基础(三十五):随机森林 (二)之 RandomForestClassifier 之重要参数
RandomForestClassifier class sklearn.ensemble.RandomForestClassifier (n_estimators=’10’, criterion=’g ...
- 前端08 /jQuery标签操作、事件
前端08 /jQuery标签操作.事件 目录 前端08 /jQuery标签操作.事件 1.标签内文本操作 1.1 html标签元素中的所有内容 1.2 text 标签元素的文本内容 2.文档标签操作 ...
- 并发编程之关键字(synchronized、volatile)
并发编程主要设计两个关键字:一个是synchronized,另一个是volatile.下面主要讲解这两个关键字,并对这两个关机进行比较. synchronized synchronized是通过JMV ...
- 09-Python异常
一.简介 在实际的工作过程中,我们会遇到各种问题,比如文件不存在,代码运行不符合某些特定逻辑等,程序在运行时,遇到这些问题便会发生异常.英文是Exception. a = float(input('请 ...