interlinkage:

https://www.luogu.org/problemnew/show/P4562

description:

solution:

  • 注意到$l=1$的时候,$t(p)$就是$1$出现的位置,答案就是$1$出现的位置之和;
  • 这启发我们找一些关键的数字,这些数字在$[l,r]$内不存在约数;
  • 结论是$t(p)$为最后一个关键数的位置;
  • 不妨反证法,假设当所有的关键数都被用掉时还有数字没有筛掉。设最后一个关键数的位置为$pos$,既然还没有全部筛完,那么在$[pos+1,n]$之间还存在数字没有被筛掉。对于其中一个没有被筛掉的数,由于它并不是关键数,那么它的某一个约数一定还没有被筛掉,那么它约数的约数也没有被筛掉...以此类推,直到一个在$[l,r]$之间没有约数的数还没有被筛掉,但我们又知道这样的数已经被用完了,假设不成立;
  • 我们可以通过埃氏筛算出关键数的个数$sum$;
  • 设$f_i$为$t(p)$等于$i$的排列个数,$n=r-l+1$,$f_i=sum*\dbinom{n-sum}{n-i}*(n-i)!*(i-1)!$;
  • $ans=\sum_{i=sum}^{n}f_i*i$;

code:

#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll; const int N=1e7+;
const int mo=1e9+;
int l,r,sum,n;
bool vis[N];
int fac[N],finv[N];
int qpow(int a,int b)
{
int re=;
for (;b;b>>=,a=1ll*a*a%mo) if (b&) re=1ll*re*a%mo;
return re;
}
int C(int a,int b)
{
if (a==b||!b) return ;
return 1ll*fac[a]*finv[b]%mo*finv[a-b]%mo;
}
int main()
{
scanf("%d%d",&l,&r);
n=r-l+;
fac[]=;
for (int i=;i<=n;i++) fac[i]=1ll*fac[i-]*i%mo;
for (int i=l;i<=r;i++)
{
if (!vis[i])
{
sum++;
for (int j=i<<;j<=r;j+=i) vis[j]=;
}
}
finv[n]=qpow(fac[n],mo-);
for (int i=n-;i>=;i--) finv[i]=1ll*finv[i+]*(i+)%mo;
int ans=;
for (int i=sum;i<=n;i++)
{
(ans+=1ll*sum*C(n-sum,n-i)%mo*fac[n-i]%mo*fac[i-]%mo*i%mo)%=mo;
}
printf("%d\n",ans);
return ;
}

[JXOI 2018] 游戏 解题报告 (组合数+埃氏筛)的更多相关文章

  1. [JXOI 2018] 守卫 解题报告 (DP)

    interlinkage: https://www.luogu.org/problemnew/show/P4563 description: solution: 注意到对于范围$[l,r]$,$r$这 ...

  2. 解题:JXOI 2018 游戏

    题面 From ZRQ,很好的计数题 我们可以发现这$len=r-l+1$个数中有一些是必须被查到的,即它们不是一些数的倍数,它们的数目$imp$可以通过一次埃氏筛求出. 在一个排列中可怜查到某个位置 ...

  3. CodeForces - 385C Bear and Prime Numbers (埃氏筛的美妙用法)

    Recently, the bear started studying data structures and faced the following problem. You are given a ...

  4. cf1154G 埃氏筛应用

    直接用埃氏筛也可以做,但是这题写起来有点恶臭.. 更加简单的写法是直接枚举gcd=k,然后里面再枚举一次i*k,即找到k两个最小的倍数,看起来复杂度很高,但其实也是埃氏筛的复杂度 因为每次枚举gcd, ...

  5. 「CF779B」「LOJ#10201.」「一本通 6.2 练习 4」Sherlock and His Girlfriend(埃氏筛

    题目描述 原题来自:Codeforces Round #400 B. Sherlock 有了一个新女友(这太不像他了!).情人节到了,他想送给女友一些珠宝当做礼物. 他买了 nnn 件珠宝.第 iii ...

  6. 埃氏筛优化(速度堪比欧拉筛) + 洛谷 P3383 线性筛素数 题解

    我们一般写的埃氏筛消耗的时间都是欧拉筛的三倍,但是欧拉筛并不好想(对于我这种蒟蒻) 虽然 -- 我 -- 也可以背过模板,但是写个不会的欧拉筛不如写个简单易懂的埃氏筛 于是就有了优化 这个优化还是比较 ...

  7. 埃氏筛+线段树——cf731F

    从2e5-1依次枚举每个数作为主显卡,然后分段求比它大的数的个数,这里的复杂度是调和级数ln2e5,即埃氏筛的复杂度.. #include<bits/stdc++.h> using nam ...

  8. 数论(8):min_25 筛(扩展埃氏筛)

    min_25 筛介绍 我们考虑这样一个问题. \[ans=\sum_{i = 1}^nf(i)\\ \] 其中 \(1 \le n \le 10^{10}\) 其中 \(f(i)\) 是一个奇怪的函数 ...

  9. U138097 小鱼吃大鱼 埃氏筛

    题目描述 小P同学在养殖一种非常凶狠的鱼,而且与其他鱼类不同,这种鱼越大越温顺,反而小鱼最凶残.当两条鱼相遇时, 小鱼会不断撕咬大鱼,每一口都咬下与它自身等重的肉(小鱼保持体重不变),直到大鱼的体重小 ...

随机推荐

  1. iproute2常用命令

    #常用命令 ip link show #显示链路 ip addr show #显示地址(或ifconfig) ip route show #显示路由(route -n) ip neigh show # ...

  2. (转)基于Metronic的Bootstrap开发框架经验总结(1)-框架总览及菜单模块的处理

    http://www.cnblogs.com/wuhuacong/p/4757984.html 最近一直很多事情,博客停下来好久没写了,整理下思路,把最近研究的基于Metronic的Bootstrap ...

  3. Python2X和Python3X 除法运算符的使用:

    首先注明:如果没有特别说明,以下内容都是基于python 3.4的. 1. /是精确除法,//是向下取整除法,%是求模 2. %求模是基于向下取整除法规则的 3. 四舍五入取整round, 向零取整i ...

  4. 触发a标签

    var aLink = document.createElement("a"); aLink.download = ''; aLink.href = url; if (docume ...

  5. 验证:java 主线程在子线程结束后才会结束

    package com.idealisan.test; /** * Hello world! * */ public class App { public static void main( Stri ...

  6. Python 字符串常用方法 day2

    1.去空格和换行符: s = ' a bc ' print(s.strip())#strip(),去掉字符串两边的空格和换行符,无法去除中间的空格 print(s.rstrip())#rstrip() ...

  7. eas之常用源码整理

    //查看是否有相关权限 boolean hasAllotPermission=         PermissionFactory.getRemoteInstance().hasFunctionPer ...

  8. 【剑指Offer】11、二进制中1的个数

      题目描述:   输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示.   解题思路:   本题有以下两个解决方案:   (1)依次判断每一位.判断的方法是先与1相与,为1则说明该位为1 ...

  9. Shell 在手分析服务器日志不愁

    转自:https://wujunze.com/server_logs_analysis.jsp 自己的小网站跑在阿里云的ECS上面,偶尔也去分析分析自己网站服务器日志,看看网站的访问量.看看有没有骇客 ...

  10. Hexo系列(三) 常用命令详解

    Hexo 框架可以帮助我们快速创建一个属于自己的博客网站,熟悉 Hexo 框架提供的命令有利于我们管理博客 1.hexo init hexo init 命令用于初始化本地文件夹为网站的根目录 $ he ...