题意:

定义f(i)=∑ k∣i k^d(i≤n),给出q个询问,每个询问询问区间[l,r]的f(i)的和。

n<=1e7 d<=1e18 q<=5e4

可以发现f(i)是个积性函数,那么我们就可以欧拉筛 O(n) 预处理出f(i),然后做个前缀和就行了。

f(i)分为三种情况:

1.i为素数 f(i)=i^d

2.i%p[j]!=0 f(i*pj)=f(i)*f(p[j])

3.i%p[j]==0 这个比较复杂,以下是f老板说的:我们要考虑的是i*p[j]比i多的约数是什么,假设i*p[j]是p[j]的k次,那多出来的约数都是p[j]^k再乘个数,否则已经被i包含了,那只要考虑这些数的贡献就行,也就是f(i*p[j]/p[j]^k)*(p[j]^k)^d

//by zykykyk
#include<cstdio>
#include<ctime>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstring>
#define rg register
#define il inline
#define vd void
#define ll long long
#define mod 1000000007
#define maxn 10000010
#define For(i,x,y) for (rg int i=(x);i<=(y);i++)
#define Dow(i,x,y) for (rg int i=(x);i>=(y);i--)
#define cross(i,k) for (rg int i=first[k];i;i=last[i])
using namespace std;
il ll max(ll x,ll y){return x>y?x:y;}
il ll min(ll x,ll y){return x<y?x:y;}
il ll read(){
ll x=;int ch=getchar(),f=;
while (!isdigit(ch)&&(ch!='-')&&(ch!=EOF)) ch=getchar();
if (ch=='-'){f=-;ch=getchar();}
while (isdigit(ch)){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
}
int n,tot,q,x,P[maxn],minp[maxn],minpd[maxn],sum[maxn];
bool vis[maxn];
ll d;
il int power(int x,ll y){
int ans=;
for (;y;y>>=,x=1ll*x*x%mod) if (y&) ans=1ll*ans*x%mod;
return ans;
}
il vd init(){
n=read(),d=read(),q=read();
sum[]=;
For(i,,n){
if (!vis[i]) P[++tot]=minp[i]=i,minpd[i]=sum[i]=power(i,d),sum[i]=(sum[i]+)%mod;
for (int j=;i*P[j]<=n&&j<=tot;j++){
int k=i*P[j];
vis[k]=;
if (i%P[j]==){
minp[k]=minp[i]*P[j];
minpd[k]=1ll*minpd[i]*minpd[P[j]]%mod;
sum[k]=(sum[i]+1ll*minpd[k]*sum[k/minp[k]]%mod)%mod;
break;
}
else {
minp[k]=P[j];
minpd[k]=minpd[P[j]];
sum[k]=1ll*sum[i]*sum[P[j]]%mod;
}
}
}
For(i,,n) (sum[i]+=sum[i-])%=mod;
} int l,r;
il vd work(){
while (q--){
l=read(),r=read();
printf("%d\n",((sum[r]-sum[l-])%mod+mod)%mod);
}
} int main(){
init(),work();
}

Luogu P3362 Cool loves shaxian 生成函数的更多相关文章

  1. 【luogu P2397 yyy loves Maths VI (mode) 】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2397 卡空间. 对于众数出现次数 > n/2 我们考虑rand. 每次正确的概率为1/2,五个测试点, ...

  2. Luogu P5351 Ruri Loves Maschera

    先ORZ\(Owen\)一发.感觉是个很套路的题,这里给一个蒟蒻的需要特判数据的伪\(n\log^2 n\)算法,真正的两只\(\log\)的还是去看标算吧(但这个好想好写跑不满啊) 首先这种树上路径 ...

  3. Luogu P2397 yyy loves Maths VI (mode)

    题目传送门 虽然只是一道黄题,但还是学到了一点新知识-- 摩尔投票法 用\(O(1)\)的内存,\(O(n)\)的时间来找出一串长度为n的数中的众数,前提是众数出现的次数要大于\(n/2\) 方法很简 ...

  4. Luogu P3602 Koishi Loves Segments

    传送门 题解 既然是选取区间,没说顺序 肯定先排遍序 都是套路 那么按什么排序呢??? 为了方便处理 我们把区间按左端点从小到大排序 把关键点也按从小到大排序 假设当扫到 \(i\) 点时,i 点之前 ...

  5. 『题解』Codeforces121A Lucky Sum

    更好的阅读体验 Portal Portal1: Codeforces Portal2: Luogu Description Petya loves lucky numbers. Everybody k ...

  6. [jzoj 6084] [GDOI2019模拟2019.3.25] 礼物 [luogu 4916] 魔力环 解题报告(莫比乌斯反演+生成函数)

    题目链接: https://jzoj.net/senior/#main/show/6084 https://www.luogu.org/problemnew/show/P4916 题目: 题解: 注: ...

  7. 【LG 4831】Scarlet loves WenHuaKe(生成函数)

    题目链接 一道好题,第一次用生成函数做题.感谢赛珂狼教我这个做法. 首先我们显然可以把题目中的限制转化成一个二分图的模型:左边有$n$个点,右边有$m$个点,如果在棋盘$(i,j)$这个点上放了炮,那 ...

  8. luogu P2000 拯救世界 生成函数_麦克劳林展开_python

    模板题. 将所有的多项式按等比数列求和公式将生成函数压缩,相乘后麦克劳林展开即可. Code: n=int(input()) print((n+1)*(n+2)*(n+3)*(n+4)//24)

  9. Luogu P4709 信息传递 (群论、生成函数、多项式指数函数)

    题意: 题解: 这道题我思路大方向是正确的,但是生成函数推错导致一直WA,看了标程才改对-- 首先一个长为\(m\)的轮换的\(n\)次幂会分裂成\(\gcd(n,m)\)个长为\(\frac{m}{ ...

随机推荐

  1. HDU 1234 开门人和关门人 (模拟)

    题目链接 Problem Description 每天第一个到机房的人要把门打开,最后一个离开的人要把门关好.现有一堆杂乱的机房签  到.签离记录,请根据记录找出当天开门和关门的人.    Input ...

  2. 查看服务器是否被DDOS攻击的方法

    伴随着现代互联网络快速发展,更加容易出现被攻击.尤其是ddos攻击已经不在是大网站需要关心的事情了.不少中小型企业,也在遭受ddos攻击.站长对ddos攻击不了解,所以网站被ddos攻击的时候,都不会 ...

  3. Python模块学习 - psutil

    psutil模块介绍 psutil是一个开源切跨平台的库,其提供了便利的函数用来获取才做系统的信息,比如CPU,内存,磁盘,网络等.此外,psutil还可以用来进行进程管理,包括判断进程是否存在.获取 ...

  4. ThinkPHP5 模型 - 事务支持

    使用事务之前,先确保数据库的存储引擎支持事务操作. MyISAM:不支持事务,主要用于读数据提高性能 InnoDB:支持事务.行级锁和并发 Berkeley DB:支持事务 ThinkPHP5 使用事 ...

  5. (十六)strtok、strtok_s、strtok_r 字符串分割函数

    1.strtok函数 函数原型:char * strtok (char *str, const char * delimiters); 参数:str,待分割的字符串(c-string):delimit ...

  6. centos_7.1.1503_src_3

    http://vault.centos.org/7.1.1503/os/Source/SPackages/ kdf-4.10.5-3.el7.src.rpm 05-Jul-2014 13:28 161 ...

  7. 己动手创建最精简的Linux

    己动手创建最精简的Linux http://blog.sina.com.cn/s/blog_71c87c170101e7ru.html 首次 LFS 搭建全过程 http://zmyxn.blog.5 ...

  8. ogre3d环境配置 SDK安装配置及简单事例教程

    ogre3d环境配置 SDK安装配置及简单事例教程 http://www.cr173.com/html/22594_1.html ogre3d环境配置 SDK安装配置及简单事例教程 http://ww ...

  9. C基础 redis缓存访问

    引言 先说redis安装, 这里采用的环境是. Linux version --generic (buildd@lgw01-) (gcc version (Ubuntu -14ubuntu2) ) # ...

  10. C json实战引擎 一 , 实现解析部分

    引言 以前可能是去年的去年,写了一个 c json 解析引擎用于一个统计实验数据项目开发中. 基本上能用. 去年在网上 看见了好多开源的c json引擎 .对其中一个比较标准的 cJSON 引擎 深入 ...