日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

K. Easy Sigma(类欧几里得)

發布時間:2023/12/4 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 K. Easy Sigma(类欧几里得) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

K. Easy Sigma

∑i=1n(?1)?i×k?,(n≤109,k≤104)\sum_{i = 1} ^{n} (-1) ^{\lfloor i \times \sqrt k \rfloor}, (n \le 10 ^ 9, k \le 10 ^ 4)\\ i=1n?(?1)?i×k??,(n109,k104)
考慮(?1)x=1?2×(xmod2)=1?2(x?2×x2)=1?2x+4×?x2?(-1) ^{x} = 1 - 2 \times (x \mod 2) = 1 - 2(x - 2 \times \frac{x}{2}) = 1 - 2x + 4 \times \lfloor \frac{x}{2} \rfloor(?1)x=1?2×(xmod2)=1?2(x?2×2x?)=1?2x+4×?2x??
∑i=1n(?1)?i×k?n?2×∑i=1n?i×k?+4×∑i=1n?i×k2?\sum_{i = 1} ^{n} (-1) ^{\lfloor i \times \sqrt{k} \rfloor}\\ n - 2 \times \sum_{i = 1} ^{n} \lfloor i \times \sqrt k \rfloor + 4 \times \sum_{i = 1} ^{n} \lfloor \frac{ i \times \sqrt k}{2} \rfloor\\ i=1n?(?1)?i×k??n?2×i=1n??i×k??+4×i=1n??2i×k???
我么假設f(a,b,c,n)=∑i=1n?(a×r+b)×ic?f(a, b, c, n) = \sum\limits_{i = 1} ^{n} \lfloor \frac{\left(a \times \sqrt r + b \right) \times i}{c} \rfloorf(a,b,c,n)=i=1n??c(a×r?+b)×i??

如果a×r+bc≥1,d=?a×r+bc?\frac{a \times \sqrt r + b} {c} \ge 1, d = \lfloor \frac{a \times \sqrt r + b} {c} \rfloorca×r?+b?1,d=?ca×r?+b??
d×n×(n+1)2+∑i=1n?(a×r+b?d×c)×ic?f(a,b,c,n)=d×n×(n+1)2+f(a,b?d×c,c,n)d \times \frac{n \times (n + 1)}{2} + \sum_{i = 1} ^{n} \lfloor \frac{\left(a \times \sqrt r + b - d \times c \right) \times i}{c} \rfloor \\ f(a, b, c, n) = d \times \frac{n \times (n + 1)}{2} + f(a, b - d \times c, c, n)\\ d×2n×(n+1)?+i=1n??c(a×r?+b?d×c)×i??f(a,b,c,n)=d×2n×(n+1)?+f(a,b?d×c,c,n)

否則a×r+bc<1\frac{a \times \sqrt r + b}{c} < 1ca×r?+b?<1

由類歐的一般套路,我們設m=?n×ar+bc?,t=a×r+bcm = \lfloor n \times \frac{a \sqrt r + b}{c} \rfloor, t = \frac{a \times \sqrt r + b}{c}m=?n×car?+b??,t=ca×r?+b?,這里的ddd沒有向下取整,是一個實數。
∑i=1n∑j=1m[j<t×i]∑i=1n∑j=1m[i>jt]∑j=1mn??jt?∑i=1mn??i×ca×r+b?n×m?∑i=1m?i×ca×r+b?\sum_{i = 1} ^{n} \sum_{j = 1} ^{m} [j < t \times i]\\ \sum_{i = 1} ^{n} \sum_{j = 1} ^{m} [i > \frac{j}{t}]\\ \sum_{j = 1} ^{m} n - \lfloor \frac{j}{t} \rfloor \\ \sum_{i = 1} ^{m} n - \lfloor \frac{i \times c}{a \times \sqrt r + b} \rfloor\\ n \times m - \sum_{i = 1} ^{m} \lfloor \frac{i \times c}{a \times \sqrt r + b} \rfloor \\ i=1n?j=1m?[j<t×i]i=1n?j=1m?[i>tj?]j=1m?n??tj??i=1m?n??a×r?+bi×c??n×m?i=1m??a×r?+bi×c??
考慮將分母有理化,也就是乘上一個a×r?ba \times \sqrt r - ba×r??b
n×m?∑i=1m?car?cba2r?b2i?n \times m - \sum_{i = 1} ^{m} \lfloor \frac{ca \sqrt r - cb}{a ^ 2 r - b ^ 2} i \rfloor\\ n×m?i=1m??a2r?b2car??cb?i?
綜上,可以通過類歐來解決,遞歸出口就是n=0n = 0n=0

#include <bits/stdc++.h>using namespace std;double x;int r;long long f(long long a, long long b, long long c, long long n) {if (!n) {return 0;}long long t = (a * x + b) / c;if (t) {return n * (n + 1) / 2 * t + f(a, b - t * c, c, n);}long long A = c * a, B = -c * b, C = a * a * r - b * b;long long d = __gcd(A, __gcd(B, C)), m = n * (a * x + b) / c;A /= d, B /= d, C /= d;return n * m - f(A, B, C, m); }int main() {// freopen("in.txt", "r", stdin);// freopen("ou.txt", "w", stdout);int T, n;scanf("%d", &T);while (T--) {scanf("%d %d", &n, &r);x = sqrt(r);int s = sqrt(r);if (s * s == r) {if (s % 2 == 0) {printf("%d\n", n);}else if (n % 2 == 0) {puts("0");}else {puts("-1");}}else {printf("%lld\n", n - 2 * f(1, 0, 1, n) + 4 * f(1, 0, 2, n));}}return 0; }

總結

以上是生活随笔為你收集整理的K. Easy Sigma(类欧几里得)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。