类欧几里得算法推导

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

第一种

f ( a , b , c , n ) = ∑ i = 0 n a i + b c f(a,b,c,n)=\sum_{i=0}^n\frac{ai+b}{c} f(a,b,c,n)=i=0ncai+b
情况一: a ≥ c   o r   b ≥ c a\ge c~or~b \ge c ac or bc
f ( a , b , c , n ) = f ( a % c , b % c , c , n ) + n ( n + 1 ) 2 ⋅ a c + b c ⋅ ( n + 1 ) f(a,b,c,n)=f(a\%c,b\%c,c,n)+\frac{n(n+1)}{2}\cdot\frac{a}{c}+\frac{b}{c}\cdot(n+1) f(a,b,c,n)=f(a%c,b%c,c,n)+2n(n+1)ca+cb(n+1)
情况二: a &lt; b   a n d   a &lt; c a&lt;b~and~a&lt;c a<b and a<c
f ( a , b , c , n ) = ∑ i = 0 n ∑ j = 1 m [ a i + b ≥ c j ] = ( n + 1 ) m − ∑ j = 0 m − 1 c j + ( c − b + a − 1 ) a = ( n + 1 ) m − f ( c , c − b + a − 1 , a , m − 1 ) f(a,b,c,n)=\sum_{i=0}^n\sum_{j=1}^m[ai+b\ge cj]=(n+1)m-\sum_{j=0}^{m-1}\frac{cj+(c-b+a-1)}{a}=(n+1)m-f(c,c-b+a-1,a,m-1) f(a,b,c,n)=i=0nj=1m[ai+bcj]=(n+1)mj=0m1acj+(cb+a1)=(n+1)mf(c,cb+a1,a,m1)

第二种

g ( a , b , c , n ) = ∑ i = 0 n i a i + b c g(a,b,c,n)=\sum_{i=0}^ni\frac{ai+b}{c} g(a,b,c,n)=i=0nicai+b
情况一: a ≥ c   o r   b ≥ c a\ge c~or~b \ge c ac or bc
g ( a , b , c , n ) = g ( a % c , b % c , c , n ) + n ( n + 1 ) ( 2 n + 1 ) 6 ⋅ a c + n ( n + 1 ) 2 ⋅ b c g(a,b,c,n)=g(a\%c,b\%c,c,n)+\frac{n(n+1)(2n+1)}{6}\cdot\frac{a}{c}+\frac{n(n+1)}{2}\cdot\frac{b}{c} g(a,b,c,n)=g(a%c,b%c,c,n)+6n(n+1)(2n+1)ca+2n(n+1)cb
情况二: a &lt; b   a n d   a &lt; c a&lt;b~and~a&lt;c a<b and a<c
g ( a , b , c , n ) = ∑ i = 0 n i ∑ j = 1 m [ a i + b ≥ c j ] = g(a,b,c,n)=\sum_{i=0}^ni\sum_{j=1}^m[ai+b\ge cj]= g(a,b,c,n)=i=0nij=1m[ai+bcj]=
1 2 ( m n ( n + 1 ) − ∑ j = 0 m − 1 ( c j + ( c − b + a − 1 ) a ) 2 + ∑ j = 0 m − 1 c j + ( c − b + a − 1 ) a ) = \frac{1}{2}\left(mn(n+1)-\sum_{j=0}^{m-1}\left(\frac{cj+(c-b+a-1)}{a}\right)^2+\sum_{j=0}^{m-1}\frac{cj+(c-b+a-1)}{a}\right)= 21(mn(n+1)j=0m1(acj+(cb+a1))2+j=0m1acj+(cb+a1))=
1 2 ( m n ( n + 1 ) − h ( c , c − b + a − 1 , a , m − 1 ) + f ( c , c − b + a − 1 , a , m − 1 ) ) \frac{1}{2}(mn(n+1)-h(c,c-b+a-1,a,m-1)+f(c,c-b+a-1,a,m-1)) 21(mn(n+1)h(c,cb+a1,a,m1)+f(c,cb+a1,a,m1))

第三种

h ( a , b , c , n ) = ∑ i = 0 n ( a i + b c ) 2 h(a,b,c,n)=\sum_{i=0}^n\left(\frac{ai+b}{c}\right)^2 h(a,b,c,n)=i=0n(cai+b)2
情况一: a ≥ c   o r   b ≥ c a\ge c~or~b \ge c ac or bc
h ( a , b , c , n ) = n ( n + 1 ) ( 2 n + 1 ) 6 ⋅ ( a c ) 2 + ( b c ) 2 ⋅ ( n + 1 ) + a c ⋅ b c n ( n + 1 ) + h(a,b,c,n)=\frac{n(n+1)(2n+1)}{6}\cdot\left(\frac{a}{c}\right)^2+\left(\frac{b}{c}\right)^2\cdot(n+1)+\frac{a}{c}\cdot\frac{b}{c}n(n+1)+ h(a,b,c,n)=6n(n+1)(2n+1)(ca)2+(cb)2(n+1)+cacbn(n+1)+
2 a c g ( a % c , b % c , c , n ) + 2 b c f ( a % c , b % c , c , n ) + h ( a % c , b % c , c , n ) 2\frac{a}{c}g(a\%c,b\%c,c,n)+2\frac{b}{c}f(a\%c,b\%c,c,n)+h(a\%c,b\%c,c,n) 2cag(a%c,b%c,c,n)+2cbf(a%c,b%c,c,n)+h(a%c,b%c,c,n)
情况二: a &lt; b   a n d   a &lt; c a&lt;b~and~a&lt;c a<b and a<c
h ( a , b , c , n ) = ∑ i = 0 n ∑ j = 1 m [ a i + b ≥ c j ] ( 2 j − 1 ) = ∑ j = 0 m − 1 ( 2 j + 1 ) ( n + 1 − c j + ( c − b + a − 1 ) a ) = h(a,b,c,n)=\sum_{i=0}^n\sum_{j=1}^m[ai+b\ge cj](2j-1)=\sum_{j=0}^{m-1}(2j+1)\left(n+1-\frac{cj+(c-b+a-1)}{a}\right)= h(a,b,c,n)=i=0nj=1m[ai+bcj](2j1)=j=0m1(2j+1)(n+1acj+(cb+a1))=
m 2 ( n + 1 ) − 2 g ( c , c − b + a − 1 , a , m − 1 ) − f ( c , c − b + a − 1 , a , m − 1 ) m^2(n+1)-2g(c,c-b+a-1,a,m-1)-f(c,c-b+a-1,a,m-1) m2(n+1)2g(c,cb+a1,a,m1)f(c,cb+a1,a,m1)

大板子

洛谷P5170

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

ll modpow(ll a, int b);
const int mod = 998244353, inv2 = (mod + 1) / 2, inv6 = modpow(6, mod - 2);
ll modpow(ll a, int b) {
    ll res = 1;
    for (; b; b >>= 1) {
        if (b & 1) res = res * a % mod;
        a = a * a % mod;
    }
    return res;
}
struct Result { ll f, g, h; };
Result extgcd(ll a, ll b, ll c, ll n) {
    if (a == 0) return (Result) { b / c * (n + 1) % mod,
        n * (n + 1) / 2 % mod * (b / c) % mod,
        (b / c) * (b / c) % mod * (n + 1) % mod };
    if (a >= c || b >= c) {
        Result lst = extgcd(a % c, b % c, c, n);
        ll ta = n * (n + 1) / 2 % mod, tb = n * (n + 1) % mod * (2 * n + 1) % mod * inv6 % mod;
        ll ac = a / c, bc = b / c;
        return (Result) { (ta * ac + (n + 1) * bc + lst.f) % mod,
            (tb * ac + ta * bc + lst.g) % mod,
            (tb * ac % mod * ac + (n + 1) * bc % mod * bc + ta * 2 * ac % mod * bc + 2 * lst.g * (a / c) + 2 * lst.f * (b / c) + lst.h) % mod };
    }
    ll m = (a * n + b) / c;
    Result lst = extgcd(c, c - b + a - 1, a, m - 1);
    return (Result) { ((n + 1) * m - lst.f + mod) % mod,
        (m * n % mod * (n + 1) + lst.f - lst.h + 2ll * mod) % mod * inv2 % mod,
        (m * m % mod * (n + 1) - 2 * lst.g - lst.f + 3ll * mod) % mod };
}
int main() {
    int T, a, b, c, n;
    for (scanf("%d", &T); T--;) {
        scanf("%d%d%d%d", &n, &a, &b, &c);
        Result res = extgcd(a, b, c, n);
        printf("%lld %lld %lld\n", res.f, res.h, res.g);
    }
    return 0;
}
【数据攻略】字节面试真题(含答案)+100道面试题库 数据攻略 阅读详情

相关推荐

基于STM32设计的消防小车

当前基于STM32单片机设计了一款智能消防小车;当前小车支持烟雾浓度检测、可燃气体检测,环境温度湿度检测、火焰源检测、能支持远程遥控,方便消防员远程操控进行灭火。小车也支持自动消防,在行驶过程中,消防智能小车通过火焰传感器感应火源以检测火焰具体位置,可以利用算法设计进行循迹灭火,该模式下驱动电机水泵喷水,可以有效控制火源的第二次发生,从而完成消防作业。小车本身带了超声波测距模块,红外壁障模块,在自动或者手动控制行驶过程中可以防止碰到障碍物损伤小车。

7316

欧几里得推导过程

参考博客:欧几里得算法小结 例题:HDU 6275Mod, Xor and Everything 题目描述 You are given an integer n. You are required to calculate (n mod 1) xor (n mod 2) xor ... xor (n mod (n - 1)) xor (n mod n). The “xor” operat...

Z_sea的博客 798

【RTD】AD7793驱动程序

AD7793完整驱动程序,支持两线、三线、四线RTD。

只要思想不滑坡,想法总比问题多。 6124

欧几里得算法浅谈(部分)

学习欧几里得算法,因为是蒟蒻,感觉网上很多都看不懂,所以自己写一篇快活快活 第一求和式: \(F(a,b,c,n)=\sum_{i=0}^n\lfloor\frac{a*i+b}{c}\rfloor\) 对于这样形式的求和,我们有以下的推导: 1.当\(a>=c\)或\(b>=c\)时,我们有: 对于\(\lfloor\frac{a}{c}\rfloor\), 它实...

baodong1651的博客 222

欧几里得学习笔记

作用 实际上是求一些关于整除的和式,比如 \[ \sum_{i=0}^n\lfloor\frac{ai+b}{c}\rfloor , \sum_{i=0}^n\lfloor\frac{ai+b}{c}\rfloor^2 , \sum_{i=0}^ni\lfloor\frac{ai+b}{c}\rfloor \] (这里的三个例子来自luoguP5170) 虽然叫这个名字,但其实跟 gc...

weixin_30699831的博客 113

欧几里得算法推导

一般形式f(a,b,c,n)=∑ni=0⌊ai+bc⌋f(a,b,c,n)=\sum_{i=0}^n \lfloor \frac{ai+b}{c}\rfloor 给定a,b,c,n,求f(a,b,c,n) 扩展: g(a,b,c,n)=∑ni=0i⌊ai+bc⌋g(a,b,c,n)=\sum_{i=0}^n i\lfloor \frac{ai+b}{c}\rfloor h(a,b,c,n)=

WorldWide_D的博客 4789

欧几里得算法

可求f(a,b,c,n)=∑i=0n⌊a∗i+bc⌋f(a,b,c,n)=\sum\limits_{i=0}^{n}⌊\frac{a*i+b}{c}⌋f(a,b,c,n)=i=0∑n​⌊ca∗i+b​⌋ 求g(a,b,c,n)=i∑i=0n⌊a∗i+bc⌋g(a,b,c,n)=i\sum\limits_{i=0}^{n}⌊\frac{a*i+b}{c}⌋g(a,b,c,n)=ii=0∑n​⌊ca∗...

weixin_43965698的博客 242

欧几里得算法详细推导过程(附带模板)

欧几里得算法推导 初识 给出三种形式: f(a,b,c,n)=∑i=0n⌊ai+bc⌋f(a, b, c, n) = \sum_{i = 0} ^{n} \lfloor\frac{ai + b}{c}\rfloorf(a,b,c,n)=∑i=0n​⌊cai+b​⌋ g(a,b,c,n)=∑i=0ni⌊ai+bc⌋g(a, b, c, n) = \sum_{i = 0} ^{n}i \lfloor \frac{ai + b}{c}\rfloorg(a,b,c,n)=∑i=0n​i⌊cai+b​⌋ h(a,

lifehappy 1073

欧几里得算法推导

总起欧几里得主要是模仿欧几里得函数的过程,求解一些问题,时间复杂度与欧几里得一致。我们这里主要是要多弄一个j,然后和i交换主体,再把i消去,达到转移为新状态的目的。代码目前懒得写,反正式子是推两次了,很正确

ZLTJohn的博客 2135

【LuoguP4433】[COCI2009-2010#1] ALADIN(含欧几里得算法推导)

题目链接 题意简述 区间赋值模意义下等差数列,询问区间和 \(N\leq 10^9,Q\leq 10^5\) Sol 每次操作就是把操作区间\([L,R]\)中的数赋值成: \[(X-L+1)*A\ mod\ B\] 考虑用线段树维护。 我们只需要能快速知道一段区间\([l,r]\)被覆盖后的和就行了,因为覆盖的标记易于下传: \[\sum_{i=l}^{r} (i-L+1)*A\ mod\ B\...

weixin_30530939的博客 219

欧几里得算法乱搞记

这三个f,g,h让我的脑子快要爆炸,还是终于推了出来,记录一下。记得初一的时候就无意间在ZJY的PPT翻到了这个东西,当时和WYT推了一波,到现在连个印象都没有。据说有几何推法,我这么渣肯定是不会的了。参考博客:Xdl.定义:f(a,b,c,n)=∑ni=0⌊ai+bc⌋f(a,b, c, n) =\sum_{i=0}^n{\lfloor {ai + b \over c} \rfloor} g(a

Cold_Chair的博客 777

【校内模拟】游戏达人(BSGS求指标)(欧几里得

传送门 TM什么毒瘤省选模拟出欧几里得。 题解: 由于本身对欧几里得不是很熟,考场上也没有往欧几里得方向去想。 结果你TM告诉我最后一步就是欧几里得 首先特判无解和全零情况。 Cx≡Dy(modp)C^x\equiv D^y\pmod pCx≡Dy(modp)看上去并不是很好操作,注意到ppp是质数,也就是说ppp有原根,那么我们直接求出C,DC,DC,D的指标c,dc,dc,d,则现在...

zxyoi_dreamer的博客(不定期诈尸) 244

欧几里得算法学习笔记

新技巧get

jwg2732的专栏 383

【题解】欧几里得算法

递归,mod,推导

Isaac Regulus的博客 373

It's a Mod, Mod, Mod, Mod World【欧几里德模板】

题目链接 昨天比赛真的考了一个模板题。然而对于没有学过这个算法的我来说emmmm 这里考的是最基本的欧几里得算法,用来算 推倒过程可以参考这篇博客,写得比较容易理解。 本题要求和的这个式子稍有不同,变通一下,考虑模数计算的原理,可以知道a mod b = a - floor(a/b)*b,代入上面那个式子可以得到要求的结果ans = p × n(n+1)/2 - q × Σ[pi / q] 直接...

AnKh_Ezra的博客 800

阿凡达(欧几里得算法

一、题目 二、解法 由于nnn很大,但是操作数很小,且一开始没有初值,很容易想到动态开点,时间复杂度O(nlog⁡n)O(n\log n)O(nlogn)。 剩下的问题是如何计算一个修改段内的和,注意到(i−l+1)⋅x%y=(i−l+1)⋅x+(i−l+1)⋅xy(i-l+1)\cdot x\% y=(i-l+1)\cdot x+\frac{(i-l+1)\cdot x}{y}(i−l+1)⋅...

C202044zxy的博客 409
上一篇: 洛谷比赛 waaadreamer的圣诞虐题赛题解
下一篇: Codeforces 1007C Guess two numbers [二分+思维]
WAautomaton
博客等级 码龄8年 66粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值