#138. 类欧几里得算法

#138. 类欧几里得算法

以下除法均为向下取整, 定义f(a,b,c,n,k1,k2)=∑x=0nxk1(a×x+bc)k2f(a, b, c, n, k_1, k_2) = \sum\limits_{x = 0} ^{n} x ^{k_1} \left(\frac{a \times x + b}{c}\right) ^ {k_2}f(a,b,c,n,k1,k2)=x=0nxk1(ca×x+b)k2
∑x=0nxk1(a×x+bc)k2,(1≤n,a,c≤109,0≤b≤109,0≤k1+k2≤10)\sum_{x = 0} ^{n} x ^{k_1} \left(\frac{a \times x + b}{c}\right) ^ {k_2}, (1 \le n, a, c \le 10 ^ 9, 0 \le b \le 10 ^ 9, 0 \le k_1 + k_2 \le 10)\\ x=0nxk1(ca×x+b)k2,(1n,a,c109,0b109,0k1+k210)
a≥c,a′=a%c,k=aca \ge c, a' = a\ \%\ c, k = \frac{a}{c}ac,a=a % c,k=ca
∑x=0nxk1(kx+a′×x+bc)k2∑x=0nxk1∑i=0k2Ck2i(kx)i(a′×x+bc)k2−i∑i=0k2(Ck2iki)∑x=0nxi+k1(a′×x+bc)k2−if(a,b,c,n,k1,k2)=∑i=0k2Ck2ikif(a′,b,c,n,i+k1,k2−i)\sum_{x = 0} ^{n} x ^{k_1} \left(kx + \frac{a' \times x + b}{c} \right) ^ {k_2}\\ \sum_{x = 0} ^{n} x ^{k_1}\sum_{i = 0} ^{k_2} C_{k_2} ^{i} (kx) ^ i \left(\frac{a' \times x + b}{c} \right) ^{k_2 - i}\\ \sum_{i = 0} ^{k_2} \left(C_{k_2} ^{i} k ^{i}\right) \sum_{x = 0} ^{n} x ^{i + k_1} \left( \frac{a' \times x + b}{c} \right) ^{k_2 - i}\\ f(a, b, c, n, k_1, k_2) = \sum_{i = 0} ^{k_2} C_{k_2} ^{i} k ^{i} f(a', b, c, n, i + k_1, k_2 - i)\\ x=0nxk1(kx+ca×x+b)k2x=0nxk1i=0k2Ck2i(kx)i(ca×x+b)k2ii=0k2(Ck2iki)x=0nxi+k1(ca×x+b)k2if(a,b,c,n,k1,k2)=i=0k2Ck2ikif(a,b,c,n,i+k1,k2i)
b≥c,b′=b%c,k=bcb \ge c, b' = b \ \%\ c, k = \frac{b}{c}bc,b=b % c,k=cb
∑x=0nxk1(a×x+b′c+k)k2∑x=0nxk1∑i=0k2Ck2iki(a×x+b′c)k2−i∑i=0k2Ck2iki∑x=0nxk1(a×x+b′c)k2−if(a,b,c,n,k1,k2)=∑i=0k2Ck2ikif(a,b′,c,n,k1,k2−i)\sum_{x = 0} ^{n} x ^{k_1} \left(\frac{a \times x + b'}{c} + k \right) ^{k_2}\\ \sum_{x = 0} ^{n} x ^{k_1} \sum_{i = 0} ^{k_2} C_{k_2} ^{i} k ^{i} \left( \frac{a \times x + b'}{c} \right) ^{k_2 - i}\\ \sum_{i = 0} ^{k_2} C_{k_2} ^{i} k^{i} \sum_{x = 0} ^{n} x ^{k_1} \left(\frac{a \times x + b'}{c} \right) ^{k_2 - i}\\ f(a, b, c, n, k_1, k_2) = \sum_{i = 0} ^{k_2} C_{k_2} ^{i} k ^{i} f(a, b', c, n, k_1, k_2 - i)\\ x=0nxk1(ca×x+b+k)k2x=0nxk1i=0k2Ck2iki(ca×x+b)k2ii=0k2Ck2ikix=0nxk1(ca×x+b)k2if(a,b,c,n,k1,k2)=i=0k2Ck2ikif(a,b,c,n,k1,k2i)
a<c,b<c,m=a×n+bca < c , \ b < c, m = \frac{a \times n + b}{c}a<c, b<c,m=ca×n+b
nk=∑i=1nik−(i−1)k∑x=0nxk1(a×x+bc)k2∑x=0nxk1∑i=1m(ik2−(i−1)k2)[a×x+bc≥i]∑i=0m−1((i+1)k2−ik2)∑x=0nxk1[a×x+bc≥i+1]∑i=0m−1((i+1)k2−ik2)∑x=0nxk1−∑i=0m−1((i+1)k2−ik2)∑x=0c×i+c−b−1axk1n ^{k} = \sum_{i = 1} ^{n} i ^{k} - (i - 1) ^{k}\\ \sum_{x = 0} ^{n} x ^{k_1} \left(\frac{a \times x + b}{c}\right) ^ {k_2}\\ \sum_{x = 0} ^{n} x ^{k_1} \sum_{i = 1} ^{m} \left(i ^{k_2} - (i - 1) ^{k_2}\right)[\frac{a \times x + b}{c} \ge i]\\ \sum_{i = 0} ^{m - 1} \left((i + 1) ^{k_2} - i ^{k_2} \right) \sum_{x = 0} ^{n} x^{k_1} [\frac{a \times x + b}{c} \ge i + 1]\\ \sum_{i = 0} ^{m - 1} \left((i + 1) ^{k_2} - i ^{k_2} \right) \sum_{x = 0} ^{n} x^{k_1} - \sum_{i = 0} ^{m - 1} \left((i + 1) ^{k_2} - i ^{k_2} \right) \sum_{x = 0} ^{\frac{c \times i + c - b - 1}{a}} x ^{k_1}\\ nk=i=1nik(i1)kx=0nxk1(ca×x+b)k2x=0nxk1i=1m(ik2(i1)k2)[ca×x+bi]i=0m1((i+1)k2ik2)x=0nxk1[ca×x+bi+1]i=0m1((i+1)k2ik2)x=0nxk1i=0m1((i+1)k2ik2)x=0ac×i+cb1xk1
前项可以通过插值得到,我们考虑后项求和,

不难得到(i+1)k2−ik2(i + 1) ^{k_2} - i ^{k_2}(i+1)k2ik2,是一个k2−1k_2 - 1k21次的多项式,我们可以通过插值预处理出其系数,设其为A(x)A(x)A(x)

对于∑i=0c×i+c−b−1axk1\sum\limits_{i = 0} ^{\frac{c \times i + c - b - 1}{a}} x ^{k_1}i=0ac×i+cb1xk1,也是一个多项式,最高次幂为k1+1k_1 + 1k1+1,设其为B(x)B(x)B(x)
∑i=0m−1((i+1)k2−ik2)∑x=0nxk1−∑x=0m−1∑i=0k2−1Aixi∑j=0k1+1Bj(c×x+c−b−1a)j∑i=0m−1((i+1)k2−ik2)∑x=0nxk1−∑i=0k2−1Ai∑j=0k1+1Bj∑x=0m−1xi(c×x+c−b−1a)jf(a,b,c,n,k1,k2)=∑i=0m−1((i+1)k2−ik2)∑x=0nxk1−∑i=0k2−1∑j=0k1+1Ai×Bj×f(a′,b′,c′,m−1,i,j)\sum_{i = 0} ^{m - 1} \left((i + 1) ^{k_2} - i ^{k_2} \right) \sum_{x = 0} ^{n} x^{k_1} - \sum_{x = 0} ^{m - 1} \sum_{i = 0} ^{k_2 - 1} A_i x ^{i} \sum_{j = 0} ^{k_1 + 1} B_j \left( \frac{c \times x + c - b - 1}{a} \right) ^{j}\\ \sum_{i = 0} ^{m - 1} \left((i + 1) ^{k_2} - i ^{k_2} \right) \sum_{x = 0} ^{n} x^{k_1} - \sum_{i = 0} ^{k_2 - 1} A_i \sum_{j = 0} ^{k_1 + 1} B_j \sum_{x = 0} ^{m - 1} x ^{i} \left( \frac{c \times x + c - b - 1}{a} \right) ^{j}\\ f(a, b, c, n, k_1, k_2) = \sum_{i = 0} ^{m - 1} \left((i + 1) ^{k_2} - i ^{k_2} \right) \sum_{x = 0} ^{n} x^{k_1} - \sum_{i = 0} ^{k_2 - 1} \sum_{j = 0} ^{k_1 + 1} A_i \times B_j \times f(a', b', c', m - 1, i, j)\\ i=0m1((i+1)k2ik2)x=0nxk1x=0m1i=0k21Aixij=0k1+1Bj(ac×x+cb1)ji=0m1((i+1)k2ik2)x=0nxk1i=0k21Aij=0k1+1Bjx=0m1xi(ac×x+cb1)jf(a,b,c,n,k1,k2)=i=0m1((i+1)k2ik2)x=0nxk1i=0k21j=0k1+1Ai×Bj×f(a,b,c,m1,i,j)
只要预处理各种插值系数,即可在O(T×k4log⁡n)O(T \times k ^4 \log n)O(T×k4logn)的复杂度内求解。

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 15;
const int P = 1e9 + 7;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
template <typename T> void chkmax(T &x, T y) {x = max(x, y); }
template <typename T> void chkmin(T &x, T y) {x = min(x, y); } 
template <typename T> void read(T &x) {x = 0; int f = 1;char c = getchar();for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;for (; isdigit(c); c = getchar()) x = x * 10 + c - '0';x *= f;
}
template <typename T> void write(T x) {if (x < 0) x = -x, putchar('-');if (x > 9) write(x / 10);putchar(x % 10 + '0');
}
template <typename T> void writeln(T x) {write(x);puts("");
}
struct info {int a[MAXN][MAXN];
};
int sum[MAXN][MAXN];
int binom[MAXN][MAXN];
int power(int x, int y) {if (y == 0) return 1;int tmp = power(x, y / 2);if (y % 2 == 0) return 1ll * tmp * tmp % P;else return 1ll * tmp * tmp % P * x % P;
}
void update(int &x, int y) {x += y;if (x >= P) x -= P;
}
info func(int n, int a, int b, int c) {assert(n >= 0 && a >= 0 && b >= 0 && c >= 0);info ans;memset(ans.a, 0, sizeof(ans.a));if (a == 0 || (1ll * a * n + b) / c == 0) {for (int k1 = 0; k1 <= 10; k1++) {int mul = 0, now = 1;for (int i = 0; i <= k1 + 1; i++) {update(mul, 1ll * now * sum[k1][i] % P);now = 1ll * now * n % P;}int base = (1ll * a * n + b) / c % P; now = 1;for (int k2 = 0; k1 + k2 <= 10; k2++) {ans.a[k1][k2] = 1ll * now * mul % P;now = 1ll * now * base % P;}}return ans;}if (a >= c) {info tmp = func(n, a % c, b, c);for (int k1 = 0; k1 <= 10; k1++)for (int k2 = 0; k1 + k2 <= 10; k2++) {int now = 1, base = a / c;for (int i = 0; i <= k2; i++) {update(ans.a[k1][k2], 1ll * binom[k2][i] * now % P * tmp.a[k1 + i][k2 - i] % P);now = 1ll * now * base % P;}}return ans;}if (b >= c) {info tmp = func(n, a, b % c, c);for (int k1 = 0; k1 <= 10; k1++)for (int k2 = 0; k1 + k2 <= 10; k2++) {int now = 1, base = b / c;for (int i = 0; i <= k2; i++) {update(ans.a[k1][k2], 1ll * binom[k2][i] * now % P * tmp.a[k1][k2 - i] % P);now = 1ll * now * base % P;}}return ans;}int m = (1ll * a * n + b) / c;info tmp = func(m - 1, c, c - b - 1, a);for (int k1 = 0; k1 <= 10; k1++) {int all = 0, now = 1;for (int i = 0; i <= k1 + 1; i++) {update(all, 1ll * now * sum[k1][i] % P);now = 1ll * now * n % P;}for (int k2 = 0; k1 + k2 <= 10; k2++) {ans.a[k1][k2] = 1ll * power(m, k2) * all % P;for (int i = 0; i <= k2 - 1; i++)for (int j = 0; j <= k1 + 1; j++) {int coef = 1ll * binom[k2][i] * sum[k1][j] % P;update(ans.a[k1][k2], P - 1ll * coef * tmp.a[i][j] % P);}}}return ans;
}
void Lagrange(int n, int *x, int *y, int *a) {static int p[MAXN], q[MAXN];memset(p, 0, sizeof(p)); p[0] = 1;for (int i = 1; i <= n; i++) {for (int j = i - 1; j >= 0; j--) {p[j + 1] = (p[j + 1] + p[j]) % P;p[j] = (P - 1ll * p[j] * x[i] % P) % P;}}for (int i = 1; i <= n; i++) {memset(q, 0, sizeof(q));for (int j = n - 1; j >= 0; j--)q[j] = (p[j + 1] + 1ll * q[j + 1] * x[i]) % P;int now = 1;for (int j = 1; j <= n; j++)if (j != i) now = 1ll * now * (x[i] - x[j]) % P;now = power((P + now) % P, P - 2);for (int j = 0; j <= n; j++)q[j] = 1ll * q[j] * now % P;for (int j = 0; j <= n; j++)a[j] = (a[j] + 1ll * q[j] * y[i]) % P;}
}
int main() {for (int i = 0; i <= 10; i++) {static int pos[MAXN], now[MAXN];now[0] = power(0, i);for (int j = 1; j <= i + 2; j++) {now[j] = (now[j - 1] + power(j, i)) % P;pos[j] = j;}Lagrange(i + 2, pos, now, sum[i]);}for (int i = 0; i <= 10; i++) {binom[i][0] = 1;for (int j = 1; j <= i; j++)binom[i][j] = binom[i - 1][j - 1] + binom[i - 1][j];}int T; read(T);while (T--) {int n, a, b, c, k1, k2;read(n), read(a), read(b), read(c), read(k1), read(k2);writeln(func(n, a, b, c).a[k1][k2]);}return 0;
}

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

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

相关文章

Spring Cloud——Consul——架构体系

我们知道&#xff0c;Eureka 2.X因遇到问题&#xff0c;已停止研发。Spring Cloud官方建议迁移到Consul或者Zookeeper等其他服务发现中间件。 下面是 Spring Cloud 支持的服务发现软件以及特性对比&#xff1a; 一、Consul 介绍 Consul 是 HashiCorp 公司推出的开源工具&…

ASP.NET Core 3.0 gRPC 双向流

目录ASP.NET Core 3.0 使用gRPCASP.NET Core 3.0 gRPC 双向流ASP.NET Core 3.0 gRPC 认证授权一.前言在前一文 《二. 什么是 gRPC 流gRPC 有四种服务类型&#xff0c;分别是&#xff1a;简单 RPC&#xff08;Unary RPC&#xff09;、服务端流式 RPC &#xff08;Server streami…

开源公司被云厂商“寄生”,咋整?

上周 OSS Capital 召集一些开源公司&#xff0c;组织了一场关于如何面对“云厂商给开源带来的危害”的会议。OSS Capital 是一家风险投资公司&#xff0c;该公司只投开源&#xff0c;其董事会合伙人之一是开源运动的先驱人物 Bruce Perens。网上有一个十分有名的“开源商业化独…

Spring Cloud Config——原理解析

springCloud config项目,用来为分布式的微服务系统中提供集成式外部配置支持,分为客户端和服务端 可以让你把配置放到远程服务器&#xff0c;目前支持本地存储、Git以及Subversion。 spring官方如下介绍: 简而言之: 通过配置服务(Config Server)来为所有的环境和应用提供外部配…

AWS加入.NET Foundation企业赞助商计划

.NET 走向开源&#xff0c;MIT许可协议。 微软为了推动.NET开源社区的发展&#xff0c;2014年联合社区成立了.NET基金会。.NET基金会是一个独立的组织&#xff0c;支持.NET社区和开源&#xff0c;旨在拓宽和加强.NET生态系统和社区。这可以通过多种方式完成&#xff0c;包括项目…

Spring cloud——Hystrix 原理解析

1、背景 分布式系统环境下&#xff0c;服务间类似依赖非常常见&#xff0c;一个业务调用通常依赖多个基础服务。如下图&#xff0c;对于同步调用&#xff0c;当库存服务不可用时&#xff0c;商品服务请求线程被阻塞&#xff0c;当有大批量请求调用库存服务时&#xff0c;最终可…

【B】替换 Quartz.net 默认使用的 MySql.Data 为 Mysqlconnector 的学习过程

文章转载授权级别&#xff1a;B无论是 Quartz.net 还是 MySql.Data 都是我们比较熟悉的库了&#xff0c;Quartz.net 如果配置为使用 MySql 数据库做持久化时&#xff0c;默认是硬编码了使用 MySql.Data 来操作 MySql 数据库的。下面是我的一些个人诉求和实践&#xff0c;和大家…

APM(应用性能管理)与Dapper原理介绍

一、APM&#xff08;应用性能管理&#xff09; 1.1 什么是APM&#xff1f; APM (Application Performance Management) 即应用性能管理&#xff08;应用性能监控&#xff09; APM主要是针对企业 关键业务的IT应用性能和用户体验的监测、优化&#xff0c;提高企业IT应用的可靠…

asp.netcore3.0 使用 DbProviderFactories 连接数据库

在.netstandard2.0时 System.Data.Common 这个包里并没有加入DbProviderFactoriesDbProviderFactories类在.netframework中是非常重要的存在,依靠他可以适配各种数据库客户端&#xff08;sqlserver、mysql、sqllite等&#xff09;创建数据库连接。现在可以像.netframework中一样…

MIT 6.824 Lab 1 MapReduce

MapReduce 目标 根据论文所说明的&#xff0c;有MASTER和WORKER两类工作节点&#xff0c;以下实现大都按照论文所说的实现&#xff0c;但是在对MASTER的实现上有所改动&#xff1a; MASTER向WORKER发送心跳检测&#xff0c;这里改为了对分配出去的任务进行超时监控。 MASTER…

大家在寻找的高级程序员到底是什么样子的?

你好&#xff0c;我是Z哥。这篇文章主题很简单&#xff0c;就是一个很常见的话题“什么是高级程序员&#xff1f;”。文章稍微长了些&#xff0c;但是很容易阅读。我们的中国文化&#xff0c;对“面子”看的特别重&#xff0c;所以你会发现身边到处都是高级XXX&#xff0c;听着…

优秀的程序员是那种过单行线马路都要往两边看的人

最近一周帮我以前一个同事推荐工作&#xff0c;顺便了解下行情&#xff0c;我这个同事我感觉还行&#xff0c;技术不说有多好&#xff0c;但是往年绝对不至于简历筛选时被刷掉那种&#xff0c;最先开始推给了一个我比较信任的HR手里&#xff0c;她兼职猎头&#xff0c;推给这个…

【为自己相亲】单身小姐姐你在哪里,我是书豪,我在等你

笔者简介Introduction书豪&#xff1a;【人工智能爱好者社区】公众号负责人《R数据科学实战&#xff1a;工具详解与案例分析》书籍作者。 你没看错这是书豪在给自己寻觅良缘如果你有&#xff0c;或者身边的朋友有兴趣请与我联系基本信息 出生日期&#xff1a;1995年5月身高&am…

知道的越多,越感觉自己渺小

作者&#xff1a;猛哥&#xff0c;关注技术和人文发展的程序员&#xff0c;架构师社区合伙人芝诺说&#xff1a;“人的知识就像一个圆&#xff0c;圆圈外是未知的&#xff0c;圆圈内是已知的&#xff0c;你知道的越多&#xff0c;你的圆圈就会越大。圆的周长也就越大&#xff0…

.NET Core 3.0 System.Text.Json 和 Newtonsoft.Json 行为不一致问题及解决办法

行为不一致.NET Core 3.0 新出了个内置的 JSON 库, 全名叫做尼古拉斯 System.Text.Json - 性能更高占用内存更少这都不是事...对我来说, 很多或大或小的项目能少个第三方依赖项, 还能规避多个依赖项的依赖 Newtonsoft.Json 版本不一致的问题, 是件极美的事情.但是, 结果总不是不…

Java9 新特性

在介绍 java9 之前&#xff0c;我们先来看看java成立到现在的所有版本。 1990年初&#xff0c;最初被命名为Oak&#xff1b;1995年5月23日&#xff0c;Java语言诞生&#xff1b;1996年1月&#xff0c;第一个JDK-JDK1.0诞生&#xff1b;1996年4月&#xff0c;10个最主要的操作系…

深入探究Kubernetes - 初识容器

♥2019年8月28星期三第47篇原创引言最近Kubernetes比较火&#xff0c;新技术快速火起来&#xff0c;一定有它强大的优势&#xff0c;Hr反馈&#xff0c;招聘时会Kubernetes的很少&#xff0c;风口上的Kubernetes一起学学&#xff1f;扫盲贴&#xff0c;参考《Kubernetes进阶实践…

Java11 新特性

Java 11新特性的详细解释。JDK 11已经于 2018年9月25日正式发布&#xff0c;那么Java 11主要包含哪些新特性呢&#xff1f; JDK 11是Java SE 11平台版本11的开源参考实现&#xff0c;由JSR 384在Java Community Process中指定。 阿里巴巴是中国唯一的JCP委员会成员公司&#x…

福爆 | 博客升级 .NET Core 3.0 又踩一坑

点击上方蓝字关注“汪宇杰博客”导语昨天刚发了一篇《生产大爆炸发生问题的是已经被删除的博客文章&#xff0c;正常情况下&#xff0c;这些不存在的文章会直接显示自定义的404页面&#xff0c;但实际上产生了500异常。日志如下&#xff1a;2019-09-26 00:11:50.8405|RD00155DB…

Sping5——响应式编程

1、响应式编程基础 1.1、什么是响应式编程&#xff1f; 响应式编程是一种面向数据流和变化传播的编程范式。 使用它可以在编程语言中很方便地表达静态或动态的数据流&#xff0c;而相关的计算模型会自动将变化的值通过数据流进行传播。我们可以使用声明的方式构建应用程序的能…