求 $\sum_{i=L}^{R}\sum_{i'=L}^{R}....[gcd_{i=1}^{n}(i)==k]$
 
$\Rightarrow \sum_{i=\frac{L}{k}}^{\frac{R}{k}}\sum_{i'=\frac{L}{k}}^{\frac{R}{k}}....[gcd_{i=1}^{n}(i)==1]$
 
$\Rightarrow \sum_{i=\frac{L}{k}}^{\frac{R}{k}}\sum_{i'=\frac{L}{k}}^{\frac{R}{k}}....\sum_{d|gcd_{i=1}^{n}(i)}\mu(d)$
 
$\Rightarrow\sum_{d=1}^{\frac{R}{d}}\mu(d)(\left \lfloor \frac{R}{kd} \right \rfloor-\left \lfloor \frac{L-1}{kd} \right \rfloor)^n$
 
用杜教筛算莫比乌斯函数前缀和,整除分块算一下就行.
#include<bits/stdc++.h>
#define maxn 1040000
#define M 1000001
#define inf 0x7f7f7f7f
#define ll long long
using namespace std;
ll mod = 1000000007;
void setIO(string s)
{
string in=s+".in";
freopen(in.c_str(),"r",stdin);
}
map<int,ll>ansmu;
int cnt;
bool vis[maxn];
int prime[maxn], mu[maxn];
ll sumv[maxn];
ll qpow(ll base,ll k)
{
ll tmp=1;
while(k)
{
if(k&1) tmp=tmp*base%mod;
base=base*base%mod;
k>>=1;
}
return tmp;
}
void Linear_shaker()
{
mu[1]=1;
int i,j;
for(i=2;i<=M;++i)
{
if(!vis[i]) prime[++cnt]=i, mu[i]=-1;
for(j=1;j<=cnt&&1ll*i*prime[j]<=M;++j)
{
vis[i*prime[j]]=1;
if(i%prime[j]==0)
{
mu[i*prime[j]]=0;
break;
}
mu[i*prime[j]]=-mu[i];
}
}
for(i=1;i<=M;++i) sumv[i]=(sumv[i-1]+mu[i]+mod)%mod;
}
ll get(ll n)
{
if(n<=M) return sumv[n];
if(ansmu[n]) return ansmu[n];
ll i,j,re=0;
for(i=2;i<=n;i=j+1)
{
j=(n/(n/i));
re=(re+(j-i+1)%mod*get(n/i)%mod+mod)%mod;
}
return ansmu[n]=(1ll-re+mod)%mod;
}
int main()
{
// setIO("input");
ll n,k,L,R,i,j,re=0;
scanf("%lld%lld%lld%lld",&n,&k,&L,&R);
L = (L - 1) / k, R = R / k;
Linear_shaker();
for(i=1;i<=R;i=j+1)
{
j=min(R/(R/i), L/i?L/(L/i):inf);
re=(re+qpow(R/i-L/i, n) * (get(j)-get(i-1)+mod)%mod)%mod;
}
printf("%lld\n",re);
return 0;
}

  

BZOJ 3930: [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] [CQOI 2015]选数(莫比乌斯反演+杜教筛)

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

  4. BZOJ 3930: [CQOI2015]选数 莫比乌斯反演

    https://www.lydsy.com/JudgeOnline/problem.php?id=3930 https://blog.csdn.net/ws_yzy/article/details/5 ...

  5. BZOJ 4176 Lucas的数论 莫比乌斯反演+杜教筛

    题意概述:求,n<=10^9,其中d(n)表示n的约数个数. 分析: 首先想要快速计算上面的柿子就要先把d(ij)表示出来,有个神奇的结论: 证明:当且仅当a,b没有相同的质因数的时候我们统计其 ...

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

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

  7. BZOJ 3930: [CQOI2015]选数 递推

    3930: [CQOI2015]选数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pro ...

  8. 【刷题】BZOJ 3930 [CQOI2015]选数

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

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

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

随机推荐

  1. day63—JavaScript浏览器对象cookie

    转行学开发,代码100天——2018-05-18 今天的主要学内容时JavaScript中浏览器对象——cookie. cookie用于存储web页面的用户信息,其存储容量很小,一般几k左右.如常见的 ...

  2. C# 内存建表备忘

    #region=====建表===== DataSet dataSet; // 创建表 DataTable table = new DataTable("testTable"); ...

  3. 类TreeMap

    TreeMap类 import java.util.Set; import java.util.TreeMap; public class IntegerDemo { public static vo ...

  4. oracle alter index rebuild offline与online

    oracle index build online与offline测试环境为oracle 11.2.0.4 --sql test SQL> conn test/test )); begin .. ...

  5. python控制流-导入模块

    一.模块 1.含义 Python 程序可以调用一组基本的函数,这称为“内建函数”,包括你见到过的 print().input()和 len()函数.Python 也包括一组模块,称为“标准库”.每个模 ...

  6. 阻塞队列 BlockingQueue 常用方法详解

    1.offer()和add()的区别 add()和offer()都是向队列中添加一个元素.但是如果想在一个满的队列中加入一个新元素,调用 add() 方法就会抛出一个 unchecked 异常,而调用 ...

  7. C#判断页面中的多个文本框输入值是否有重复的实现方法

    List<string> list = new List<string>();//首先定义一个泛型数组 //这里假如说有四个文本框 string mainseat = this ...

  8. python学习笔记(8):

    一.变量和类型 1.Python基本变量类型: 整数 ,浮点数 ,字符串, 布尔值 ,空值 ,函数, 模块, 类型, 自定义类型 2.变量定义 :变量存储在内存中的值.这就意味着在创建变量时会在内存中 ...

  9. slot-scope 插槽 的使用 ——'<template slot-scope="page">'

    slot-scope="page"slot-scope 是一个插槽,拿外面的数据,可以获取当前一行的数据page.row.pageId 拿到当前行数据的pageId注意:slot- ...

  10. vue - 过滤器filter的基本使用

    1.全局过滤器 输出: 过滤器可以多次来调用 输出: 2.私有过滤器 <!DOCTYPE html> <html lang="en"> <head&g ...