题面:

传送门

思路:

首先我们把区间缩小到$\left[\lfloor\frac{L-1}{K}\rfloor,\lfloor\frac{R}{K}\rfloor\right]$

这道题的最特殊的点在于,他的gcd不是两个数的而是多个数的,是一坨sigma

但是,我们发现它依然可以反演

令$f\left(i\right)$为区间$\left[l,r\right]$内选出$n$个数,总计$gcd=i$的方法数

令$g\left(i\right)$为区间$\left[l,r\right]$内选出$n$个数,总计$i|gcd$的方法数

那么依旧满足$g(d)=\sum_{d|i}f\left(i\right)$,反演后得到$f(d)=\sum_{d|i}\mu\left(\frac id\right)g\left(i\right)$

因此$f\left(d\right)=\sum_{i=1}^{\frac nd}\left(\lfloor\frac Rd\rfloor-\lfloor\frac Ld\rfloor\right)^n$

答案即为对于缩小过的$L,R$,$f\left(1\right)$的值

因为后半部分的可以用快速幂加数论分块做到$O\left(\sqrt n\right)$

所以前半部分杜教筛$\mu$即可

Code:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#define ll long long
using namespace std;
inline ll read(){
ll re=,flag=;char ch=getchar();
while(ch>''||ch<''){
if(ch=='-') flag=-;
ch=getchar();
}
while(ch>=''&&ch<='') re=(re<<)+(re<<)+ch-'',ch=getchar();
return re*flag;
}
ll pri[],tot=,mu[],n,K,L,R;bool vis[];
ll MOD=1e9+;
void init(){
ll i,j,k;mu[]=;
for(i=;i<=;i++){
if(!vis[i]){
pri[++tot]=i;mu[i]=-;
}
for(j=;j<=tot;j++){
k=i*pri[j];if(k>) break;
vis[k]=;
if(i%pri[j]==){
mu[k]=;break;
}
mu[k]=-mu[i];
}
}
for(i=;i<=;i++) mu[i]=mu[i-]+mu[i];
}
ll sum1(ll x){return x*(x+)/;}
map<ll,ll>m;
ll S2(ll x){
if(x<=) return mu[x];
ll re=,i,j;
if(m[x]) return m[x];
for(i=;i<=x;i=j+){
j=x/(x/i);
re-=((j-i+)*S2(x/i))%MOD;
re=(re+MOD)%MOD;
}
return m[x]=re;
}
ll ppow(ll a,ll b){
ll re=;
while(b){
if(b&) re=re*a%MOD;
a=a*a%MOD;b>>=;
}
return re%MOD;
}
int main(){
init();
n=read();K=read();L=read();R=read();
L=(L-)/K;R=R/K;
ll i,j;ll ans=;
for(i=;i<=R;i=j+){
j=R/(R/i);
if(i<=L) j=min(j,L/(L/i));
ans=(ans+(S2(j)-S2(i-)+MOD)%MOD*ppow(R/i-L/i,n)%MOD)%MOD;
}
printf("%lld\n",ans);
}

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

  1. BZOJ_4176_Lucas的数论_杜教筛+莫比乌斯反演

    BZOJ_4176_Lucas的数论_杜教筛+莫比乌斯反演 Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求 ...

  2. 【XSY2731】Div 数论 杜教筛 莫比乌斯反演

    题目大意 定义复数\(a+bi\)为整数\(k\)的约数,当且仅当\(a\)和\(b\)为整数且存在整数\(c\)和\(d\)满足\((a+bi)(c+di)=k\). 定义复数\(a+bi\)的实部 ...

  3. [51Nod 1237] 最大公约数之和 (杜教筛+莫比乌斯反演)

    题目描述 求∑i=1n∑j=1n(i,j) mod (1e9+7)n<=1010\sum_{i=1}^n\sum_{j=1}^n(i,j)~mod~(1e9+7)\\n<=10^{10}i ...

  4. [bzoj 4176] Lucas的数论 (杜教筛 + 莫比乌斯反演)

    题面 设d(x)d(x)d(x)为xxx的约数个数,给定NNN,求 ∑i=1N∑j=1Nd(ij)\sum^{N}_{i=1}\sum^{N}_{j=1} d(ij)i=1∑N​j=1∑N​d(ij) ...

  5. bzoj 4916: 神犇和蒟蒻 (杜教筛+莫比乌斯反演)

    题目大意: 读入n. 第一行输出“1”(不带引号). 第二行输出$\sum_{i=1}^n i\phi(i)$. 题解: 所以说那个$\sum\mu$是在开玩笑么=.= 设$f(n)=n\phi(n) ...

  6. [51nod1220] 约数之和(杜教筛+莫比乌斯反演)

    题面 传送门 题解 嗯--还是懒得写了--这里 //minamoto #include<bits/stdc++.h> #define R register #define IT map&l ...

  7. 【BZOJ4176】Lucas的数论-杜教筛

    求$$\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}f(ij)$$,其中$f(x)$表示$x$的约数个数,$0\leq n\leq 10^9$,答案膜$10^9+ ...

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

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

  9. 【BZOJ3930】选数(莫比乌斯反演,杜教筛)

    [BZOJ3930]选数(莫比乌斯反演,杜教筛) 题面 给定\(n,K,L,R\) 问从\(L-R\)中选出\(n\)个数,使得他们\(gcd=K\)的方案数 题解 这样想,既然\(gcd=K\),首 ...

随机推荐

  1. Maven 虐我千百遍,我待 Maven 如初恋

    前言 在如今的互联网项目开发当中,特别是Java领域,可以说Maven随处可见.Maven的仓库管理.依赖管理.继承和聚合等特性为项目的构建提供了一整套完善的解决方案,可以说如果你搞不懂Maven,那 ...

  2. IPv4与IPv6的校验函数

    1. PHP校验IPv4掩码是否合法,在网上搜了下,排名最高的如下, <?php function is_mask($mask){ $bin_mask =(string)decbin(ip2lo ...

  3. swl字符串

    创建字符串方法 去掉时间戳 #define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT ...

  4. node的webserver模板

    const express = require('express'); const swig =require('swig'); const fs = require('fs'); //创建服务器 c ...

  5. c++引用与指针的区别

    c++引用与指针的区别 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名. 指针的权威定义: In a declaration T D where ...

  6. JavaScript设置div中的文字滚动起来 实现滚动效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. struts2、hibernate的知识点

    以下内容是我在复习struts2.hibernate和spring的时候记下得到,部分书上找不到的内容来自网络 以下是网络部分的原文网站: http://blog.csdn.net/frankaqi/ ...

  8. Centos 安装python 3.7 ,同时兼容python2.7

    下载Python源码 从http://www.python.org/download/根据需要的版本下载源文件. 例如上图就是我在官网直接找到3.5.6版本的下载页面,点击的tar源码包进行下载. 1 ...

  9. Linux NFS服务器的安装与配置详解

    一.NFS服务简介 NFS是Network File System(网络文件系统).主要功能是通过网络让不同的服务器之间可以共享文件或者目录.NFS客户端一般是应用服务器(比如web,负载均衡等),可 ...

  10. Centos7多内核情况下修改默认启动内核方法

    1.1  进入grub.cfg配置文件存放目录/boot/grub2/并备份grub.cfg配置文件 [root@linux-node1 ~]# cd /boot/grub2/ [root@linux ...