[CQOI2015]选数(luogu)

Description

题目描述

我们知道,从区间 [L,H](L 和 H 为整数)中选取 N 个整数,总共有 (H-L+1)^N 种方案。

小 z 很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的 N 个整数都求一次最大公约数,以便进一步研究。

然而他很快发现工作量太大了,于是向你寻求帮助。你的任务很简单,小 z 会告诉你一个整数 K,

你需要回答他最大公约数刚好为 K 的选取方案有多少个。

由于方案数较大,你只需要输出其除以 10^9+7 的余数即可。

输入格式

输入一行,包含四个空格分开的正整数,依次为 N,K,L,H。

输出格式

输出一个整数,为所求方案数。

数据范围

1 ≤ N,K ≤ 10^9,1 ≤ L ≤ H ≤ 10^9,H−L ≤ 10^5。

Soluiton

  • 先将 L、H 分别化为比 L、H 小的第一个 K 的倍数 / K
  • 问题变成从 ( L , H ] 中选 N 个可重复的数,使它们的 gcd 为 1 的方案数
  • 设 f(i)为从 ( L , H ] 中选 N 个可重复的数,使它们的 gcd 为 i 的方案数,
  • 发现 $F(i)=\sum\limits_{ i | d}^{} f(d)=(\lfloor H \rfloor - \lfloor L \rfloor)^N$,好求!

反演一下

$$f(i)=\sum\limits_{i|d,d<=H}^{}\mu(d)*F(d/i)$$

  • 然后整除分块,注意同时考虑 L,H
  • d可能很大,线性筛死了,杜教筛还活着

Code

#include <cstdio>
#include <cstdlib>
#include <map>
#include <algorithm>
#define ll long long
using namespace std;
const ll P=1e9+;
const int N=6e6,M=6e6+;
int L,H,k,n,prime[M],tot,vis[M];
ll an,u[M];
map <int,ll> w;
ll qpow(int x,int y)
{
ll ans=,z=x;
while(y)
{
if(y&) ans=ans*z%P;
z=z*z%P,y>>=;
}
return ans;
}
ll F(int x)
{
return qpow((H/x-L/x),n);
}
ll get(int x)
{
if(x<=N) return u[x];
if(w[x]) return w[x];
int ans=;
for(int l=,r;l<=x;l=r+)
{
r=x/(x/l);
ans-=(r-l+)*get(x/l),ans%=P;
}
return w[x]=ans;
}
void init()
{
u[]=;
for(int i=;i<=N;i++)
{
if(!vis[i]) prime[++tot]=i,u[i]=-;
for(int j=;j<=tot && prime[j]<=N/i;j++)
{
vis[prime[j]*i]=;
if(i%prime[j]==) break;
u[prime[j]*i]=-u[i];
}
u[i]+=u[i-];
}
}
int main()
{
init();
scanf("%d%d%d%d",&n,&k,&L,&H);
L=(L-)/k,H=H/k;
for(int l=,r;l<=H;l=r+)
{
if(!(L/l)) r=H/(H/l);
else r=min(H/(H/l),L/(L/l));
an=(an+(get(r)-get(l-))%P*F(l)%P)%P;
}
printf("%lld\n",(an+P)%P);
return ;
}

[CQOI2015]选数(莫比乌斯反演,杜教筛)的更多相关文章

  1. 【bzoj3930】[CQOI2015]选数 莫比乌斯反演+杜教筛

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

  2. luogu3172 [CQOI2015]选数 莫比乌斯反演+杜教筛

    link 题目大意:有N个数,每个数都在区间[L,H]之间,请求出所有数的gcd恰好为K的方案数 推式子 首先可以把[L,H]之间的数字gcd恰好为K转化为[(L-1)/K+1,H/K]之间数字gcd ...

  3. BZOJ 3930: [CQOI2015]选数 莫比乌斯反演 + 杜教筛

    求 $\sum_{i=L}^{R}\sum_{i'=L}^{R}....[gcd_{i=1}^{n}(i)==k]$   $\Rightarrow \sum_{i=\frac{L}{k}}^{\fra ...

  4. [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛)

    [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛) 题面 我们知道,从区间\([L,R]\)(L和R为整数)中选取N个整数,总共有\((R-L+1)^N\)种方案.求最大公约数 ...

  5. [复习]莫比乌斯反演,杜教筛,min_25筛

    [复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...

  6. P4450-双亲数,P5221-Product,P6055-[RC-02]GCD【莫比乌斯反演,杜教筛】

    除了最后一题都比较简单就写一起了 P4450-双亲数 题目链接:https://www.luogu.com.cn/problem/P4450 题目大意 给出\(A,B,d\)求有多少对\((a,b)\ ...

  7. 【BZOJ3930】[CQOI2015]选数 莫比乌斯反演

    [BZOJ3930][CQOI2015]选数 Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律 ...

  8. 51nod 1237 最大公约数之和 V3【欧拉函数||莫比乌斯反演+杜教筛】

    用mu写lcm那道卡常卡成狗(然而最后也没卡过去,于是写一下gcd冷静一下 首先推一下式子 \[ \sum_{i=1}^{n}\sum_{j=1}^{n}gcd(i,j) \] \[ \sum_{i= ...

  9. 【bzoj4176】Lucas的数论 莫比乌斯反演+杜教筛

    Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目"求Sigma(f(i)),其中1<=i< ...

  10. 【CCPC-Wannafly Winter Camp Day3 (Div1) F】小清新数论(莫比乌斯反演+杜教筛)

    点此看题面 大致题意: 让你求出\(\sum_{i=1}^n\sum_{j=1}^n\mu(gcd(i,j))\). 莫比乌斯反演 这种题目,一看就是莫比乌斯反演啊!(连莫比乌斯函数都有) 关于莫比乌 ...

随机推荐

  1. NABCD项目分析

    Share软件 N(需求):我们设计的这款手机app名为share,旨在打造一款服务于大学生的软件,像qq,微信,微博等,这些社交软件大都服务范围太广,我们就是为了满足当代大学生为了本校学生交流方便, ...

  2. 玩转Django2.0---Django笔记建站基础九(一)(Auth认证系统)

    第九章 Auth认证系统 Django除了有强大的Admin管理系统之外,还提供了完善的用户管理系统.整个用户管理系统可分为三大部分:用户信息.用户权限和用户组,在数据库中分别对应数据表auth_us ...

  3. NOIP游记

    好像很久没写博客了诶,NOIP考完,写篇游记吧XD Day 1 紧张紧张,去年第一题小凯的疑惑坑煞我也,今年怕不是什么大凯的疑惑吧... 进考场,重启,下软件,在键盘上猛敲RP++ 发密码辣,FeiX ...

  4. 靶机-SickOs 1.2 Walkthrough

    SickOs:1.2 https://www.vulnhub.com/entry/sickos-12,144/ 参考:https://www.cnblogs.com/yuzly/p/10854392. ...

  5. Vim学习之路1

    与之前的随笔一样,这个也是记录Vim常用命令以供日后查找所用.对于Vim,简介而又功能强大,学习之后代码书写相当愉快. 1. 保存并退出 :wq 2. 进入标准插入模式退出命令模式 i 3. 退出标准 ...

  6. ArcGIS10.2安装教程

    1,首先要下载Arcgis 10.2软件,很大大约有2个多G.下载后分别全部解压. 2,首先,安装相应的LicenseManager,双击Arcgis 10.2打开安装界面,选择安装. 3,开始安装L ...

  7. JWT | io.jsonwebtoken.security.WeakKeyException: The signing key's size is 1024 bits which is not se

    背景 今天集成JWT的时候,选用了PS256算法,在用使用PGP KEY作为私钥JWT进行签名的时候,报了如下错误: "C:\Program Files\Java\jdk1.8.0_161\ ...

  8. 04讲基础篇:经常说的CPU上下文切换是什么意思(下)

    具体分析 自愿上下文切换变多了,说明进程都在等待资源,有可能发生了 I/O 等其他问题: 非自愿上下文切换变多了,说明进程都在被强制调度,也就是都在争抢 CPU,说明 CPU 的确成了瓶颈: 中断次数 ...

  9. Windbg实用手册

    Windbg工作中用的不多,所以命令老是记不住,每次使用都要重新查命令,挺烦. 趁这次培训的机会好好测试和总结了一下,下次再用就方便多了. 在这里一起共享一下,如果有错误,请指正. 基本知识和常用命令 ...

  10. 关于C语言数组的小练习--笔记

    #include <stdio.h> #include <windows.h> #include <mmsystem.h> #include <string. ...