当前位置: 首页 > news >正文

【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();}
}

相关文章:

【min25筛】【CF2020F】Count Leaves

题目 定义 f ( n , 0 ) 1 f(n,0)1 f(n,0)1&#xff0c; f ( n , d ) ∑ k ∣ n f ( k , d − 1 ) f(n,d)\sum_{k|n}f(k,d-1) f(n,d)∑k∣n​f(k,d−1) 给出 n , k , d n,k,d n,k,d&#xff0c;你需要求出: ∑ i 1 n f ( i k , d ) m o d ( 1 0 9 7 ) \sum_{i1}^n f(i^k…...

【d57】【sql】1661. 每台机器的进程平均运行时间

思路 一方面考察自连接&#xff0c;另一方面考察group by 这里主要说明 group by 用法&#xff1a; 1.在 SQL 查询中&#xff0c;GROUP BY 子句用于将结果集中的行分组&#xff0c;目的通常就是 对每个组应用聚合函数&#xff08;如 SUM(), AVG(), MAX(), MIN(), COUNT() 等…...

ArcGIS共享数据的最佳方法(不丢可视化、标注等各类显示信息一样带)

今天我们介绍一下ArcGIS数据共享的几个小妙招 我们时常要把数据发给对方&#xff0c;特别是很多新手朋友要将shp发给对方时只是发送了shp后缀的文件&#xff0c;却把shp的必要组成文件dbf、shx等等给落下了。 还有很多朋友给图层做好了符号化标注&#xff0c;但是数据一发给别…...

小程序this.getOpenerEventChannel()当前页面与navigateTo页面之间数据通信

this.getOpenerEventChannel() 是微信小程序中获取页面打开它的页面事件通道的方法。但是&#xff0c;这个方法只在页面是被wx.navigateTo打开的情况下才能使用。如果页面是通过其他方式打开的&#xff0c;比如wx.redirectTo&#xff0c;那么就无法使用这个方法。 解决方案&…...

调用飞书接口导入供应商bug

1、业务背景 财务这边大部分系统都是供应商项目&#xff0c;由于供应商的研发人员没有飞书项目的权限&#xff0c;涉及到供应商系统需求 财务这边都是通过多维表格进行bug的生命周期管理如图&#xff1a; 但多维表格没有跟飞书项目直接关联&#xff0c;测试组做bug统计的时候无…...

《深度学习》OpenCV 角点检测、特征提取SIFT 原理及案例解析

目录 一、角点检测 1、什么是角点检测 2、检测流程 1&#xff09;输入图像 2&#xff09;图像预处理 3&#xff09;特征提取 4&#xff09;角点检测 5&#xff09;角点定位和标记 6&#xff09;角点筛选或后处理&#xff08;可选&#xff09; 7&#xff09;输出结果 3、邻域…...

golang grpc初体验

grpc 是一个高性能、开源和通用的 RPC 框架&#xff0c;面向服务端和移动端&#xff0c;基于 HTTP/2 设计。目前支持c、java和go&#xff0c;分别是grpc、grpc-java、grpc-go&#xff0c;目前c版本支持c、c、node.js、ruby、python、objective-c、php和c#。grpc官网 grpc-go P…...

基于小程序+Vue + Spring Boot的进销存库存出库入库统计分析管理系统

目录 一、项目背景及需求分析 1. 项目背景 2. 需求分析 二、系统架构设计 1. 技术选型 2. 模块划分 三、数据库设计数据库表结构 四、前端实现 五、后端实现 1. RESTful API设计 2. 数据库操作 六、安全性和性能优化 1. 安全性 2. 性能优化 七、测试与部署 1. …...

【数据结构与算法】时间复杂度和空间复杂度例题

文章目录 时间复杂度常数阶时间O(1)对数阶时间O(logN)线性阶时间O(n)线性对数阶时间O(nlogN)平方阶时间O(n*n) 空间复杂度常量空间O(1)线性空间O(n)二维空间O(n*n)递归空间 时间复杂度 常数阶时间O(1) 代码在执行的时候&#xff0c;它消耗的时间并不随着某个变量的增长而增长…...

停止模式下USART为什么可以唤醒MCU?

在MCU的停止模式下&#xff0c;USART之类的外设时钟是关闭的&#xff0c;但是USART章节有描述到在停止模式下可以用USART来对MCU进行唤醒&#xff1a; 大家是否会好奇在外设的时钟被关闭的情况下&#xff0c;USART怎么能通过接收中断或者唤醒事件对MCU进行唤醒的呢&#xff1…...

Web安全 - 路径穿越(Path Traversal)

文章目录 OWASP 2023 TOP 10导图定义路径穿越的原理常见攻击目标防御措施输入验证和清理避免直接拼接用户输入最小化权限日志监控 ExampleCode漏洞代码&#xff1a;路径穿越攻击案例漏洞说明修复后的安全代码代码分析 其他不同文件系统下的路径穿越特性Windows系统类Unix系统&a…...

JSR303微服务校验

一.创建idea 二.向pom.xml添加依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.7.RELEASE</version></parent><properties><java.vers…...

56. QTreeWidget的基本使用

1. 说明 在软件开发中会遇到将数据信息制作成一种树目录的形式进行展示,那么此时就可以借助QT提供的QTreeWidget控件来实现这种需求,本篇博客会做一个案例简要说明这个控件的基本使用方法,博客中代码能够实现的功能是将此项目代码所在文件夹中的内容展示出来,如下图所示:…...

领域偏移:协变量移位下的域自适应

现在我们将焦点转移到一种叫做协变量转移的扰动上。我们在一个分类或回归设置中工作&#xff0c;我们希望从x预测y&#xff0c;并假设p≈(y | x)和p∗(y | x)是相同的(标记函数在训练和测试之间不会改变) 假设 (Covariate Shift)。对于列车分布p~和检验分布p∗&#xff0c;我们…...

前端开发技术框架选型

一、引言 在前端开发领域&#xff0c;技术框架的选择对于项目的成功至关重要。一个优秀的前端框架不仅可以提高开发效率&#xff0c;还能确保项目的稳定性和可扩展性。而不同的框架具有不同的特点和优势&#xff0c;能够满足不同项目的需求。下面将对目前主流的前端开发技术框…...

/etc/init.d/mysql

Since you’ve installed MySQL from source, you’ll need to create a custom init script to manage the MySQL server (start, stop, status) similarly to a service. Here’s a simple init.d script template for MySQL that you can use. This script assumes MySQL is…...

Qt_线程介绍与使用

目录 1、QThread常用API 2、Qt线程安全 3、使用线程QThread 4、connect函数的第五个参数 5、Qt互斥锁 5.1 QMutexLocker 6、条件变量 7、信号量 结语 前言&#xff1a; 线程是应用程序开发非常重要的概念&#xff0c;在Qt中&#xff0c;用QThread类来实现多线程&a…...

通讯方面的数据,人工智能 机器学习的时候,因为数字都接近于一,数据归一化的一种方法,做了一个简化版本的Z-score标准化

这个表达式实现了一种形式的数据归一化&#xff0c;它将张量x中的每个元素除以x的标准差的估计值。这种处理方式可以使得变换后的数据具有单位标准差&#xff08;假设数据已经是零均值或者在计算过程中考虑了均值&#xff09;。具体来说&#xff0c;它是基于以下步骤进行的&…...

python itertools模块介绍

itertools 是 Python 内建的一个高效处理迭代器的模块&#xff0c;提供了创建复杂迭代器的函数工具。它包含一系列用于迭代、组合、排列、过滤等功能的迭代器构建工具&#xff0c;常用于数据处理和算法设计。下面是 itertools 模块中一些常见的函数介绍&#xff1a; 1. 无限迭…...

【分布式微服务云原生】5分钟深入剖析Kafka:Leader与Follower分区的秘密及负载均衡的艺术

深入剖析Kafka&#xff1a;Leader与Follower分区的秘密及负载均衡的艺术 摘要&#xff1a; Apache Kafka作为当前最流行的分布式流处理平台之一&#xff0c;其内部的分区机制和消费者组的负载均衡策略是实现高吞吐量和高可靠性的关键。本文将深入探讨Kafka中Leader分区与Follo…...

使用curl命令直接调试Taotoken大模型聊天接口的详细步骤

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用curl命令直接调试Taotoken大模型聊天接口的详细步骤 对于需要在底层进行调试、验证或是在无特定SDK环境中工作的开发者而言&am…...

云端AI模型基准测试:从参数迷信到效能优先的选型实战

1. 项目概述&#xff1a;一次颠覆认知的云端AI模型基准测试作为一名长期在本地部署AI智能体&#xff08;我用的是OpenClaw&#xff09;的实践者&#xff0c;模型选型一直是我工作流中的核心决策。过去几个月&#xff0c;我默认使用的都是阿里云出品的qwen3.5:397b-cloud。这个模…...

三维扫描平民化实战:从手机APP到高精度重建全流程指南

1. 项目概述&#xff1a;当三维扫描走下神坛几年前&#xff0c;如果你想获取一个真实物体的三维数字模型&#xff0c;那通常意味着你需要联系一家专业的三维扫描服务公司&#xff0c;支付一笔不菲的费用&#xff0c;然后等待专业人士用一台价格堪比一辆豪华轿车的设备&#xff…...

新手也能看懂的CrackMe逆向实战:从查壳到用OD改跳转,一步步带你破解

新手也能看懂的CrackMe逆向实战&#xff1a;从查壳到用OD改跳转&#xff0c;一步步带你破解 逆向工程就像拆解一个神秘的黑匣子&#xff0c;而CrackMe则是专门为练习破解设计的"玩具程序"。记得我第一次接触CrackMe时&#xff0c;面对满屏的汇编代码完全不知所措。本…...

LabVIEW数字IO编程避坑指南:单点采样、连续采样到底怎么选?NI-MAX测试面板帮你验证

LabVIEW数字IO编程实战&#xff1a;采样模式选择与NI-MAX验证全攻略 在工业自动化测试领域&#xff0c;LabVIEW的数字IO模块是最基础也最常用的功能之一。许多工程师在初次接触数字IO编程时&#xff0c;往往会被各种采样模式搞得晕头转向——单点采样、N采样、连续采样&#xf…...

AI编程助手色彩科学技能库:从OKLCH到APCA的现代色彩实践

1. 项目概述&#xff1a;一个为AI编程助手打造的“色彩科学专家”技能库如果你和我一样&#xff0c;经常在开发与色彩相关的工具、设计系统&#xff0c;或者需要向团队解释为什么某个颜色方案行不通时&#xff0c;总得反复查阅同一堆资料——那个讲解OKLAB色彩空间的视频、那篇…...

数据挖掘工具Weka之第三方算法包的集成与实战

1. Weka第三方算法包的价值与场景 如果你用过Weka的基础功能&#xff0c;可能会发现自带的算法虽然丰富&#xff0c;但面对某些特殊任务时还是力不从心。比如要做电商用户分群&#xff0c;基础的k-means聚类只能处理数值型数据&#xff0c;而真实的用户画像包含大量分类变量&am…...

Typora“激活”与“美化”实战指南

1. Typora基础认知与安装准备 Typora作为一款广受好评的Markdown编辑器&#xff0c;其独特之处在于将编辑与预览合二为一。不同于传统Markdown编辑器需要分屏显示源代码和渲染效果&#xff0c;Typora实现了真正的所见即所得——你在编辑区输入的Markdown语法会实时转换为排版效…...

从原理到实践:InSAR技术如何重塑地表形变监测

1. 从雷达信号到毫米级形变&#xff1a;InSAR技术原理揭秘 想象一下&#xff0c;你站在湖边向平静的水面扔一块石头&#xff0c;水波会以同心圆的形式向外扩散。如果这时有人在水面另一处也扔了一块石头&#xff0c;两列水波相遇时就会产生干涉现象——有的地方波峰叠加变得更高…...

别再折腾wgrib了!用Python的xarray+cfgrib在Windows上优雅读取GRIB气象数据

告别命令行混乱&#xff1a;用Python生态在Windows上高效处理GRIB气象数据 气象数据分析工作中&#xff0c;GRIB格式文件一直是让人又爱又恨的存在。这种专为网格化气象数据设计的二进制格式&#xff0c;虽然存储效率高、兼容性强&#xff0c;但处理起来却常常让初学者望而生畏…...