Portal

Description

给出\(n,k,L,R(\leq10^9)\),求从\([L,R]\)中选出\(n\)个可相同有顺序的数使得其gcd为\(k\)的方案数。

Solution

记\(f(x)\)表示gcd为\(x\)时的方案数,那么我们要求的就是\(f(k)\)。设\(F(x)=\sum_{x|d}f(d)\)表示gcd为\(x\)的倍数时的方案数,即\(F(x)=(⌊\dfrac{R}{x}⌋-⌊\dfrac{L-1}{x}⌋)^n\)。于是我们得到

\[\begin{align*}
f(k) &= \sum_{k|d}\mu(\frac{k}{d})F(d) \\
&= \sum_{i=1}^{+∞}\mu(i)(⌊\frac{R}{ik}⌋-⌊\frac{L-1}{ik}⌋)^n \\
&= \sum_{i=1}^{+∞}\mu(i)(⌊\frac{⌊\frac{R}{k}⌋}{i}⌋-⌊\frac{⌊\frac{L-1}{k}⌋}{i}⌋)^n
\end{align*}$$ 于是$\mu(x)$用杜教筛+map求前缀和,后面的部分整除分块即可。

##Code
```cpp
//「CQOI2015」选数
#include <cstdio>
#include <map>
typedef long long lint;
using std::map;
inline int min(int x,int y) {return x<y?x:y;}
const int P=1e9+7;
const int N=2e6+10;
int n0;
int prCnt,pr[N]; bool prNot[N];
int mu[N],sum0[N];
void init(int n)
{
mu[1]=1;
for(int i=2;i<=n;i++)
{
if(!prNot[i]) pr[++prCnt]=i,mu[i]=-1;
for(int j=1;j<=prCnt;j++)
{
int x=i*pr[j];
if(x>n) break;
prNot[x]=true;
if(i%pr[j]) mu[x]=-mu[i];
else break;
}
}
for(int i=1;i<=n;i++) sum0[i]=sum0[i-1]+mu[i];
}
map<int,int> S;
map<int,bool> get;
int sum(int x)
{
if(x<=n0) return sum0[x];
if(get[x]) return S[x];
int r=1;
for(int L=2,R;L<=x;L=R+1)
{
int v=x/L; R=x/v;
r=(r-1LL*(R-L+1)*sum(v)%P+P)%P;
}
get[x]=true; return S[x]=r;
}
int pow(int x,int y)
{
int r=1,t=x;
for(int i=y;i;i>>=1,t=(1LL*t*t)%P) if(i&1) r=(1LL*r*t)%P;
return r;
}
int main()
{
int n,k,a,b; init(n0=2e6);
scanf("%d%d%d%d",&n,&k,&a,&b);
a=(a-1)/k,b=b/k;
lint ans=0;
for(int L=1,R;L<=b;L=R+1)
{
int v1=b/L,v2=a/L; R=v2?min(b/v1,a/v2):b/v1;
ans=(ans+1LL*(sum(R)-sum(L-1)+P)*pow(v1-v2,n)%P)%P;
}
printf("%lld\n",ans);
return 0;
}
```

##P.S.
因为$\mu(x)$的部分和有可能是负数,所以运算之前要加一个$10^9+7$变成正数...\]

LibreOJ2095 - 「CQOI2015」选数的更多相关文章

  1. 「CQOI2015」选数

    「CQOI2015」选数 题目描述 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都 ...

  2. 「FJOI2016」神秘数 解题报告

    「FJOI2016」神秘数 这题不sb,我挺sb的... 我连不带区间的都不会哇 考虑给你一个整数集,如何求这个神秘数 这有点像一个01背包,复杂度和值域有关.但是你发现01背包可以求出更多的东西,就 ...

  3. LibreOJ2097 - 「CQOI2015」任务查询系统

    Portal Description 给出\(n(n\leq10^5)\)个任务,和总时间范围\(m(m\leq10^5)\).每个任务有开始/结束时间\(s_i,e_i(1\leq s_i \leq ...

  4. 【LOJ】#3094. 「BJOI2019」删数

    LOJ#3094. 「BJOI2019」删数 之前做atcoder做到过这个结论结果我忘了... em,就是\([1,n]\)之间每个数\(i\),然后\([i - cnt[i] + 1,i]\)可以 ...

  5. 「BZOJ3505」[CQOI2014] 数三角形

    「BZOJ3505」[CQOI2014] 数三角形 这道题直接求不好做,考虑容斥,首先选出3个点不考虑是否合法的方案数为$C_{(n+1)*(m+1)}^{3}$,然后减去三点一线的个数就好了.显然不 ...

  6. 「CQOI2015」任务查询系统

    「CQOI2015」任务查询系统 传送门 好像也是板子题??? 区间修改,单点查询,考虑差分. 然后每次查询时就直接在对应的主席树上二分即可. 参考代码: #include <cstdio> ...

  7. 【BZOJ】【3930】【CQOI2015】选数

    数论/莫比乌斯反演/快速mu前缀和 比较容易想到令f[x]表示gcd=x的方案数,令g[x]表示x|gcd的方案数. 那么有$ g(d)=\sum_{d|n} f(n)$,根据莫比乌斯反演,有$f(d ...

  8. BZOJ 3930 【CQOI2015】 选数

    题目链接:选数 这种SB题我都Wa飞了,彻底没救系列- 首先,我们可以发现1,如果我们选了两个不同的数,那么它们的\(\gcd\)不会超过\(r-l+1\).于是,我们可以设一个\(f_i\)表示任取 ...

  9. 【LOJ】#2277. 「HAOI2017」方案数

    题解 这个出题人完美诠释了什么叫 用心出题,用脚造数据 算完复杂度怎么也得\(O(o^2 * 200)\)略微跑不满,但是有8个测试点虽然有障碍但是一个障碍都不在路径上,2个测试点只有10来个点在路径 ...

随机推荐

  1. GWT-2.5.1离线安装

    GWT官方离线包下载地址 http://dl.google.com/eclipse/plugin/3.7/zips/gpe-e37-latest-updatesite.zip 以下是GWTDesign ...

  2. [机器学习] 简单的机器学习算法和sklearn实现

    机器学习基础算法理解和总结 KNN算法 理解 KNN其实是最好理解的算法之一,其实就是依次和空间中的每个点进行距离比较,取距离最近的N个点,看这N个点的类别,那么要判断的点的类别就是这N个点中类别占比 ...

  3. wxWidgets:处理wxEVT

    我们仍然以继承于wxFrame的MyFrame作为例子. MyFrame.h: class MyFrame : public wxFrame { ...... private: ...... void ...

  4. 读书笔记-《深入理解Java虚拟机:JVM高级特性与最佳实践》

    目录 概述 第一章: 走进Java 第二章: Java内存区域与内存溢出异常 第三章: 垃圾收集器与内存分配策略 第四章: 虚拟机性能监控与故障处理 第五章: 调优案例分析与实战 第六章: 类文件结构 ...

  5. 作业题:闰年 if((year%4==0&&year%100!=0)||year&400==0)

    作业题:闰年 if((year%4==0&&year%100!=0)||year&400==0)

  6. 学习笔记(二):使用 TensorFlow 的起始步骤(First Steps with TensorFlow)

    目录 1.工具包 TensorFlow 张量 (Tensor) 图 (graph) TensorBoard 2.tf.estimator API Estimator 预创建的 Estimator (p ...

  7. NodeJS基础入门-fs文件系统

    文件I/O是由简单封装的标准POSIX函数提供.通过require('fs') 使用该模块.所有的方法都有异步和同步的形式. 异步方法的最后一个参数都是一个回调函数.传给回调函数的参数取决于具体方法, ...

  8. 【python】python安装和运行报错汇总

    本文主要用于汇总在python开发过程中遇到的各种环境.工具相关问题,便于后续遇到相关问题,及时搞定,持续更新. 一.安装pip失败,具体如下: 错误信息: python setup.py insta ...

  9. 使用kickstart + pxe 部署无人值守安装

    1.作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装. 常规的安装系统方法: 光盘安装系统:一个服务器DVD内置光驱百 ...

  10. CentOS 7 忘记root密码解决方法

    CentOS 7  root密码的重置方式和CentOS 6完全不一样,CentOS 7与之前的版本6变化还是比较大的,以进入单用户模式修改root密码为例: 1.重启机器,进入grub菜单的时候按e ...