Educational Codeforces Round 7 F. The Sum of the k-th Powers 多项式、拉格朗日插值

news2025/3/10 10:28:00

题目链接

题目大意

( ∑ i = 1 n i k ) (\sum_{i=1}^{n} i^k) (i=1nik) m o d ( 1 0 9 + 7 ) mod(10^9+7) mod(109+7) .
数据范围 : 1 ≤ n ≤ 1 0 9 1 \leq n \leq 10^9 1n109 , 0 ≤ k ≤ 1 0 6 0 \leq k \leq 10^6 0k106 .

思路

f ( n ) = ∑ i = 1 n = 1 k + 2 k + ⋅ ⋅ ⋅ + n k f(n)=\sum_{i=1}^n=1^k+2^k+ \cdot \cdot \cdot +n^k f(n)=i=1n=1k+2k++nk.

观察题面可以发现,所求的答案是一个 k + 1 k+1 k+1 次多项式,我们只需要找 k + 2 k+2 k+2 个点带入拉格朗日插值公式中就可以计算出 f ( n ) f(n) f(n) .

n + 1 n+1 n+1 组点值 ( x i , y i ) (x_i,y_i) (xi,yi) ,得到的 n n n 次多项式 f ( n ) f(n) f(n) 的拉格朗日插值的方法为 : f ( x ) = ∑ i = 0 n y i ∏ j ≠ i x − x j x i − x j f(x)=\sum_{i=0}^n y_i \prod_{j \neq i} \frac {x-x_j}{x_i-x_j} f(x)=i=0nyij=ixixjxxj .

如果按照这个公式代进去硬算时间复杂度 O ( n 2 ) O(n^2) O(n2) ,但我们可以选 k + 2 k+2 k+2 个连续的点对这个式子进行简化。

我们把 1 1 1 k + 2 k+2 k+2 代入,对于分子, ( n − 1 ) ( n − 2 ) ⋅ ⋅ ⋅ ( n − ( i − 1 ) ) (n-1)(n-2) \cdot \cdot \cdot (n-(i-1)) (n1)(n2)(n(i1)) 乘与 ( n − ( k + 2 ) ) ( n − ( k + 1 ) ) ⋅ ⋅ ⋅ ( n − ( i + 1 ) ) (n-(k+2))(n-(k+1)) \cdot \cdot \cdot (n-(i+1)) (n(k+2))(n(k+1))(n(i+1)) ,这个可以 O ( k + 2 ) O(k+2) O(k+2) 预处理出来前缀积和后缀积, O ( 1 ) O(1) O(1) 取用;对于分母是 1 1 1 乘到 ( i − 1 ) (i-1) (i1) 再乘上 − 1 -1 1 乘到 ( − ( k + 2 − i ) (-(k+2-i) ((k+2i) ,可以 O ( k + 2 ) O(k+2) O(k+2)内预处理出 1 1 1 k + 2 k+2 k+2 阶乘的逆元, O ( 1 ) O(1) O(1) 取用。

code

#include <bits/stdc++.h>
#define int long long
#define ll long long
#define pii pair<int, int>

using namespace std;
const int N = 1e6 + 1000, mod = 1e9 + 7;
int pre[N], suf[N], infac[N];

int ksm(int x, int k)
{
    int res = 1;
    while (k > 0)
    {
        if (k & 1)
            res = res * x % mod;
        x = x * x % mod;
        k >>= 1;
    }
    return res;
}

int inv(int x)
{
    return ksm(x, mod - 2);
}

signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int n, k;
    cin >> n >> k;
    pre[0] = suf[k + 3] = infac[0] = 1;
    int fac = 1;
    for (int i = 1; i <= k + 2; ++i)
    {
        pre[i] = pre[i - 1] * (n - i) % mod;
        fac = fac * i % mod;
    }
    infac[k + 2] = inv(fac);
    for (int i = k + 2; i >= 1; --i)
    {
        suf[i] = suf[i + 1] * (n - i) % mod;
        if (i < k + 2)
            infac[i] = infac[i + 1] * (i + 1) % mod;
    }
    int y = 0, ans = 0;
    for (int i = 1; i <= k + 2; ++i)
    {
        y = (y + ksm(i, k)) % mod;
        int tmp1 = pre[i - 1] * suf[i + 1] % mod;
        int tmp2 = infac[i - 1] * (((k + 2 - i) & 1) ? mod - infac[k + 2 - i] : infac[k + 2 - i]) % mod;
        ans = (ans + y * tmp1 % mod * tmp2 % mod) % mod;
    }
    cout << (ans + mod) % mod << '\n';
    return 0;
}

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

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

相关文章

LINUX网络基础 [五] - HTTP协议

目录 HTTP协议 预备知识 认识 URL 认识 urlencode 和 urldecode HTTP协议格式 HTTP请求协议格式 HTTP响应协议格式 HTTP的方法 HTTP的状态码 ​编辑HTTP常见Header HTTP实现代码 HttpServer.hpp HttpServer.cpp Socket.hpp log.hpp Makefile Web根目录 H…

WPS Word中英文混杂空格和行间距不一致调整方案

文章目录 问题1&#xff1a;在两端对齐的情况下&#xff0c;如何删除参考文献&#xff08;英文&#xff09;的空格问题2&#xff1a;中英文混杂行间距不一致问题问题3&#xff1a;设置中文为固定字体&#xff0c;设置西文为固定字体参考 问题1&#xff1a;在两端对齐的情况下&a…

CSDN博客:Markdown编辑语法教程总结教程(中)

❤个人主页&#xff1a;折枝寄北的博客 Markdown编辑语法教程总结 前言1. 列表1.1 无序列表1.2 有序列表1.3 待办事项列表1.4 自定义列表 2. 图片2.1 直接插入图片2.2 插入带尺寸的图片2.3 插入宽度确定&#xff0c;高度等比例的图片2.4 插入高度确定宽度等比例的图片2.5 插入居…

电子学会—2024年月6青少年软件编程(图形化)四级等级考试真题——水仙花数

水仙花数 如果一个三位数等于它各个数位上的数字的立方和&#xff0c;那么这个数就是水仙花数&#xff0c;例如:153 111 555 333&#xff0c;153就是一个水仙花数。 1.准备工作 (1)保留默认角色小猫; (2)白色背景。 2.功能实现 (1)使用循环遍历所有三位数&#xff0c;把所…

JetBrains学生申请

目录 JetBrains学生免费授权申请 IDEA安装与使用 第一个JAVA代码 1.利用txt文件和cmd命令运行 2.使用IDEA新建项目 JetBrains学生免费授权申请 本教程采用学生校园邮箱申请&#xff0c;所以要先去自己的学校申请校园邮箱。 进入JetBrains官网 点击立即申请&#xff0c;然…

langchain系列(终)- LangGraph 多智能体详解

目录 一、导读 二、概念原理 1、智能体 2、多智能体 3、智能体弊端 4、多智能体优点 5、多智能体架构 6、交接&#xff08;Handoffs&#xff09; 7、架构说明 &#xff08;1&#xff09;网络 &#xff08;2&#xff09;监督者 &#xff08;3&#xff09;监督者&…

侯捷 C++ 课程学习笔记:深入理解智能指针

文章目录 每日一句正能量一、引言二、智能指针的核心概念&#xff08;一&#xff09;std::unique_ptr&#xff08;二&#xff09;std::shared_ptr&#xff08;三&#xff09;std::weak_ptr 三、学习心得四、实际应用案例五、总结 每日一句正能量 如果说幸福是一个悖论&#xff…

访问不了 https://raw.githubusercontent.com 怎么办?

修改 Hosts 文件&#xff08;推荐&#xff09;​ 原理&#xff1a;通过手动指定域名对应的 IP 地址&#xff0c;绕过 DNS 污染。 步骤&#xff1a; 1、访问 IPAddress.com&#xff0c;搜索 raw.githubusercontent.com&#xff0c;获取当前最新的 IPv4 地址&#xff08;例如 1…

大模型工程师学习日记(十五):Hugging Face 模型微调训练(基于 BERT 的中文评价情感分析)

1. datasets 库核心方法 1.1. 列出数据集 使用 d atasets 库&#xff0c;你可以轻松列出所有 Hugging Face 平台上的数据集&#xff1a; from datasets import list_datasets# 列出所有数据集 all_datasets list_datasets()print(all_datasets)1.2. 加载数据集 你可以通过 l…

子数组、子串系列(典型算法思想)—— OJ例题算法解析思路

一、53. 最大子数组和 - 力扣&#xff08;LeetCode&#xff09; 算法代码&#xff1a; class Solution { public:int maxSubArray(vector<int>& nums) {// 1. 创建 dp 表// dp[i] 表示以第 i 个元素结尾的子数组的最大和int n nums.size();vector<int> dp(n…

Windows编程----进程的当前目录

进程的当前目录 Windows Api中有大量的函数在调用的时候&#xff0c;需要传递路径。比如创建文件&#xff0c;创建目录&#xff0c;删除目录&#xff0c;删除文件等等。拿创建文件的CreateFile函数做比喻&#xff0c;如果我们要创建的文件路径不是全路径&#xff0c;那么wind…

AVL树的介绍及实现

文章目录 &#xff08;一&#xff09;AVL的概念&#xff08;二&#xff09;AVL树的实现1.AVL树的结构2.AVL树的插入3.AVL树的查找 &#xff08;三&#xff09;检查一棵树是否是AVL树 &#xff08;一&#xff09;AVL的概念 AVL树是一棵高度平衡的二叉搜索树&#xff0c;通过控制…

快速生成viso流程图图片形式

我们在写详细设计文档的过程中总会不可避免的涉及到时序图或者流程图的绘制&#xff0c;viso这个软件大部分技术人员都会使用&#xff0c;但是想要画的好看&#xff0c;画的科学还是比较难的&#xff0c;现在我总结一套比较好的方法可以生成好看科学的viso图(图片格式)。主要思…

【极光 Orbit•STC8A-8H】03. 小刀初试:点亮你的LED灯

【极光 Orbit•STC8H】03. 小刀初试&#xff1a;点亮你的 LED 灯 七律 点灯初探 单片方寸藏乾坤&#xff0c;LED明灭见真章。 端口配置定方向&#xff0c;寄存器值细推敲。 高低电平随心控&#xff0c;循环闪烁展锋芒。 嵌入式门初开启&#xff0c;从此代码手中扬。 摘要 …

OSPF报文分析

OSPF报文分析 组播地址 224.0.0.0&#xff5e;224.0.0.255为预留的组播地址&#xff08;永久组地址&#xff09;&#xff0c;地址224.0.0.0保留不做分配&#xff0c;其它地址供路由协议使用&#xff1b; 224.0.1.0&#xff5e;238.255.255.255为用户可用的组播地址&#xff08;…

MySql性能(9)- mysql的order by的工作原理

全字段排序rowid排序全字段排序和rowid排序 3.1 联合索引优化 3.2 覆盖索引优化优先队列算法优化建议 5.1 修改系统参数 5.2 优化sql 1. 全字段排序 CREATE TABLE t ( id int(11) NOT NULL,city varchar(16) NOT NULL, name varchar(16) NOT NULL, age int(11) NOT NULL,addr v…

爬虫案例七Python协程爬取视频

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Python协程爬取视频 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 爬虫案例七协程爬取视频 提示&#xff1a;以下是本篇文章正文…

智慧城市智慧社区项目建设方案

一、项目背景 在全球化进程加速的今天&#xff0c;城市化问题日益凸显&#xff0c;传统的城市管理模式已难以满足现代社会对高效、智能化管理的需求。智慧城市和智慧社区的概念应运而生&#xff0c;其核心目标是通过信息技术手段&#xff0c;提升城市资源的利用效率&#xff0…

RabbitMQ高级特性--消息确认机制

目录 一、消息确认 1.消息确认机制 2.手动确认方法 二、代码示例 1. AcknowledgeMode.NONE 1.1 配置文件 1.2 生产者 1.3 消费者 1.4 运行程序 2.AcknowledgeMode.AUTO 3.AcknowledgeMode.MANUAL 一、消息确认 1.消息确认机制 生产者发送消息之后&#xff0c;到达消…

Java EE 进阶:Spring IoCDI

IOC的简单介绍 什么是Spring&#xff1f;Spring是一个开源的框架&#xff0c;让我们的开发更加的简单&#xff0c;我们可以用一句更加具体的话来概括Spring&#xff0c;就是Spring是一个包含众多工具方法的IOC容器。 简单介绍一下IOC&#xff0c;我们之前说过通过ReqestContr…