【min25筛】【CF2020F】Count Leaves

题目

定义 f ( n , 0 ) = 1 f(n,0)=1 f(n,0)=1 f ( n , d ) = ∑ k ∣ n f ( k , d − 1 ) f(n,d)=\sum_{k|n}f(k,d-1) f(n,d)=knf(k,d1)
给出 n , k , d n,k,d n,k,d,你需要求出: ∑ i = 1 n f ( i k , d ) m o d ( 1 0 9 + 7 ) \sum_{i=1}^n f(i^k,d) \ mod\ (10^9+7) i=1nf(ik,d) mod (109+7)
n ≤ 1 e 9 , k , d ≤ 1 e 5 n\leq 1e9,k,d\leq1e5 n1e9k,d1e5
原题链接

思路

因数?数据范围这么大?那这玩意肯定是积性函数。于是我们通过观察,发现对于固定的 k , d k,d k,d f ( i k , d ) f(i^k,d) f(ik,d) 就是积性函数。但注意,这不是完全积性函数。
所以我们要想一想 f ( p k , d ) , p i s p r i m e f(p^k,d),p\ is\ prime f(pk,d)p is prime 怎么求。
注意到, p k p^k pk 的因数是: p 0 , p 1 , . . . , p k p^0, p^1,...,p^k p0,p1,...,pk,这相当于一个 k × d k\times d k×d 的网格,你从左上角走到右下角的方案数。于是有:
f ( p k , d ) = C ( d + k , k ) f(p^k,d)=C(d+k,k) f(pk,d)=C(d+k,k)
我们惊喜的发现,如果 k , d k,d k,d 不变,这就是个定值。定值也是多项式的一种,所以可以用 min25 筛。
但是这又和传统的 min25 筛,因为我们要求 f ( p e k , d ) f(p^{ek},d) f(pek,d) 的值。但其实这玩意只有在求 S S S 的时候会发生(毕竟 g 只是求所有质数的前缀和),依旧是很好做的。

一定要注意的是,求 g g g 的时候,我们是在对常数求 min25,注意不要多乘一个 C ( d + k , k ) C(d+k,k) C(d+k,k)

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=5e6+7,inf=1e18,mod=1e9+7;
vector<int> p,sp,g,id1,id2,w;
int n,K,d;
int power(int x,int t)
{int b=1;while(t){if(t&1) b=b*x%mod;x=x*x%mod; t>>=1;}return b;
}
vector<int> fac,unfac;
void initf(int n)
{fac.assign(n+1,0);unfac.assign(n+1,0);fac[0]=1;for(int i=1; i<=n; i++)fac[i]=fac[i-1]*i%mod;unfac[n]=power(fac[n],mod-2);for(int i=n-1; i>=0; i--)unfac[i]=unfac[i+1]*(i+1)%mod;
}
int C(int x,int y)
{if(x<y) return 0;return fac[x]*unfac[y]%mod*unfac[x-y]%mod;
}
int tot,sqr,cp;
void init(int n)
{p.clear();p.push_back(0);sp.assign(2*n+7,0);w.assign(2*n+7,0);g.assign(2*n+7,0);id1.assign(2*n+7,0);id2.assign(2*n+7,0);tot=0;vector<bool> vis(n+1);for(int i=2; i<=n; i++){if(!vis[i]){p.push_back(i);int now=p.size()-1;sp[now]=(cp*now)%mod;}for(auto j:p){if(!j) continue;if(i*j>n) break;vis[i*j]=1;if(i%j==0) break;}}
}
int S(int x,int y)
{if(x<=1||p[y]>=x) return 0;int k=(x<=sqr)?id1[x]:id2[n/x];int ans=(mod+g[k]-sp[y])%mod;for(int k=y+1; k<p.size()&&p[k]*p[k]<=x; k++){int t=p[k];for(int e=1; t<=x; e++,t*=p[k]){
//			int p=t%mod;(ans+=C(d+e*K,d)*(S(x/t,k)+(e!=1))%mod)%=mod;}}return ans;
}
void O_o()
{cin>>n>>K>>d;cp=C(K+d,d);sqr=sqrt(n);init(sqr);for(int i=1,j; i<=n; i=j+1){j=n/(n/i);w[++tot]=n/i;int now=w[tot]%mod;g[tot]=cp*(now-1)%mod;if(w[tot]<=sqr)id1[w[tot]]=tot;elseid2[n/w[tot]]=tot;}for(int i=1; i<p.size(); i++){for(int j=1; j<=tot&&p[i]*p[i]<=w[j]; j++){int k=w[j]/p[i]<=sqr?id1[w[j]/p[i]]:id2[n/(w[j]/p[i])];(g[j]+=mod-(g[k]-sp[i-1]+mod)%mod)%=mod;}}int ans=S(n,0)+1;cout<<ans%mod<<"\n";
}
signed main()
{ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);cout<<fixed<<setprecision(12);int T=1;initf(N);cin>>T;while(T--){O_o();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1551486.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

掌握自动化测试必要的几种技能?

1.自动化测试员技能——编程语言 当我开始担任手动测试人员时&#xff0c;我不喜欢编码。但是&#xff0c;当我逐渐进入自动化领域时&#xff0c;对我来说很清楚&#xff0c;如果没有对编程语言的一些基本了解&#xff0c;就无法编写逻辑自动化测试脚本。 对编程有一点了解&a…

记录|Modbus-TCP产品使用记录【德克威尔】

目录 前言一、德克威尔1.1 实验图1.2 DECOWELL IO Tester 软件1.3 读写设置1.4 C#进行Modbus-TCP读写 更新时间 前言 参考文章&#xff1a; 使用的第二款Modbus-TCP产品。 一、德克威尔 1.1 实验图 1.2 DECOWELL IO Tester 软件 这也是自带模块配置软件的。下图就是德克威尔的…

nlp任务之预测中间词-huggingface

目录 1.加载编码器 1.1编码试算 2.加载数据集 3.数据集处理 3.1 map映射&#xff1a;只对数据集中的sentence数据进行编码 3.2用filter()过滤 单词太少的句子过滤掉 3.3截断句子 4.创建数据加载器Dataloader 5. 下游任务模型 6.测试预测代码 7.训练代码 8.保…

Solidworks斜接法兰快速绘制钣金箱体

Solidworks斜接法兰快速绘制钣金箱体 Chapter1 Solidworks斜接法兰快速绘制钣金箱体 Chapter1 Solidworks斜接法兰快速绘制钣金箱体 0.5mm间距为钣金焊接的预留焊缝。

高标准农田灌区信息化:为农业可持续发展注入新动力

高标准农田灌区信息化&#xff0c;作为现代农业科技与信息技术深度融合的典范&#xff0c;正逐步成为推动农业可持续发展的关键力量。这一创新模式不仅提升了农业生产效率与资源利用率&#xff0c;还为保障国家粮食安全、促进农村经济转型升级以及实现环境友好型农业开辟了新路…

基于Springboot+Vue的视频点播系统设计与实现登录 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统中…

小程序原生-数据的双向绑定

1. 通过model:实现数据的双向绑定 <input type"text" name"名称" model:value"{{name}}" /> <checkbox model:checked"{{isChecked}}"/> 是否同意该协议// pages/test/test.js Page({data: {name:wuk,isChecked:false}, }…

黑马头条day9 热点文章定时文章

bug 调度失败 刚开始以为是进程端口被占用了 Address already in use: bind【解决办法】-CSDN博客 ①先查询出占用端口的进程号 netstat -ano|findstr 8010②杀死该进程号的进程 taskkill -f -pid 21320发现关掉端口还是不行 解决了跨域问题也不行 解决办法 给的官方里…

png图片怎么转换成jpg?5个软件帮助你快速进行图片的格式转换

png图片怎么转换成jpg&#xff1f;5个软件帮助你快速进行图片的格式转换 将 PNG 图片转换为 JPG 是一种常见的需求&#xff0c;特别是当你需要减小图片文件大小或在不支持 PNG 格式的环境中使用时。以下五款软件能帮助你快速、简单地完成图片格式的转换&#xff0c;它们功能齐…

可以白嫖PPT模板的6个网站,赶紧收藏

推荐6个PPT模板网站&#xff0c;免费下载&#xff0c;绝对的高质量&#xff0c;赶紧收藏&#xff01; 1、菜鸟图库 ppt模板免费下载|ppt背景图片 - 菜鸟图库 菜鸟图库网有非常丰富的免费素材&#xff0c;像设计类、办公类、自媒体类等素材都很丰富。PPT模板种类很多&#xff0…

H5公众号调用微信扫一扫功能(vue)

1.引入微信sdk import wx from weixin-js-sdk 2.初始化微信sdk,构建扫一扫所需要的参数 async initWxConfig() { //首先获取当前url地址 let url await getSignUrl() let params { appid: this.$route.query.appid, url: url, } //调用后端接口获取公众号参数 const resp a…

湖州市自闭症寄宿学校:个性化关爱让每个孩子都能茁壮成长

在探索自闭症儿童教育的广阔领域中&#xff0c;湖州市的自闭症寄宿学校以其个性化的教育模式&#xff0c;为众多家庭点亮了希望之光。然而&#xff0c;当我们把视线转向中国南方的一座现代化大都市——广州&#xff0c;会发现另一所同样在自闭症儿童教育领域深耕细作、成果斐然…

推荐一个可以把PDF样本册转换为翻页电子书的网站

​随着互联网的普及&#xff0c;越来越多的企业和个人开始意识到线上展览的重要性。如何将实体样本册转化为线上版本&#xff0c;让更多人了解和欣赏自己的产品与服务&#xff1f; 一、网站简介 这款PDF样本册免费上传网站名为“FLBOOK”&#xff0c;致力于为广大用户提供便捷…

非关键尺寸的失效模式和效应分析(FMEA)是否有必要进行?

在追求极致的过程中&#xff0c;一个看似不起眼的细节——非关键尺寸的失效模式和效应分析&#xff08;FMEA&#xff09;&#xff0c;却常常被忽视或低估其重要性。本文&#xff0c;深圳天行健企业管理咨询公司旨在分享为何在非关键领域&#xff0c;FMEA同样不可或缺&#xff0…

redis面试-2024

1、Redis的基本数据结构类型 string、list、set、hash、zet。还有三种特殊类型&#xff1a;Geospatial、Hyperloglog、bitMap。 2、各数据类型对应的场景 3、redis快的原因 *基于内存 内存读写效率远高于磁盘读写&#xff0c;省去磁盘IO操作 *存储形式 Redis作为K-V键值对…

Oracle 日志文件多路复用

多路复用 PRODCDB 数据库的所有日志组中的 redo log 文件&#xff0c;存放目录&#xff1a; /u01/app/oracle/oradata/MREDO 1.创建目录 mkdir -p /u01/app/oracle/oradata/MREDO 2.查看日志文件路径 select group#,member from v$logfile; 3.增加日志组文件 alter database a…

828华为云征文|华为云Flexus X实例初体验

一直想有自己的一款的服务器&#xff0c;为了更好的进行家庭娱乐&#xff0c;甚至偶尔可以满足个人搭建开发环境的需求&#xff0c;直到接触到了华为云 Flexus X 云服务器。 Flexus 云服务器 X 实例是面向中小企业和开发者打造的轻量级云服务器。提供快速应用部署和简易的管理…

【论文阅读】MEDICAL GRAPH RAG: TOWARDS SAFE MEDICAL LARGE LANGUAGE MODEL VIA

论文地址&#xff1a;https://arxiv.org/abs/2408.04187#:~:textWe%20introduce%20a%20novel%20graph-based%20Retrieval-Augmented 代码地址&#xff1a; GitHub - MedicineToken/Medical-Graph-RAG: Medical Graph RAG: Graph RAG for the Medical Data 1 研究背景&#xff1…

英伟达GPU和互联路线发展分析

英伟达最新GPU和互联路线图 Nvidia在计算、网络和图形领域独树一帜&#xff0c;雄厚资金助力其在生成式AI市场领跑&#xff0c;可自由探索创新路线图。 21世纪&#xff0c;Nvidia虽无需拓展数据中心计算&#xff0c;却因HPC研究人员引领进入加速计算。AI研究人员借助GPU计算开…

C/C++ 中的未定义行为(Undefined Behavior, UB)

0. 简介 在 C/C 编程中&#xff0c;理解未定义行为&#xff08;UB&#xff09;及其相关概念至关重要。本文将对未定义行为进行详细解析&#xff0c;并通过实例展示其影响与处理方法。 1. 概念辨析 在 C/C 中&#xff0c;未定义行为容易与以下两个概念混淆&#xff1a; 1.1 …