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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

T48568 【zzy】yyy送礼物

發布時間:2024/3/12 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 T48568 【zzy】yyy送礼物 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數論題。。。

來源:luogu秋令營的模擬賽1T2

這道題數據極大,\(N,T \leq 10000000\)

求的是\(\sum_{i=1}^{n}{n \mod i}\)

看上去就是余數求和。打那道題的除法分塊做法有70分。

接下來介紹滿分做法:

變成這個式子:

\[\sum_{i=1}^n{\lfloor \frac{n}{i} \rfloor \times i}=\sum_{i=1}^n{d_1(i)}\]

\(d_1(x)\)表示\(x\)的約數和。

這個東西可以用線性篩順便搞出來。

這里粘兩個博客,講得很好,我就不講了。。。

https://blog.csdn.net/controlbear/article/details/77527115

https://blog.csdn.net/wu_tongtong/article/details/79684277

所以可以線性求出這個東西,弄下前綴和。

然后用\(n^2\)減掉這個東西就是答案了。

代碼:

#include<cstdio>#define ll long long const int maxn = 10000005; const int N = maxn - 5; bool notprime[maxn]; int prime[maxn], tot; ll sd[maxn], sp[maxn]; ll pre[maxn]; ll read() {ll ans = 0, s = 1;char ch = getchar();while(ch > '9' || ch < '0'){ if(ch == '-') s = -1; ch = getchar(); }while(ch >= '0' && ch <= '9') ans = (ans << 3) + (ans << 1) + ch - '0', ch = getchar();return s * ans; } void init() {notprime[1] = true; sd[1] = 1; sp[1] = 1;for(int i = 2; i <= N; i++){if(!notprime[i]){prime[++tot] = i;sd[i] = i + 1;sp[i] = i + 1;}for(int j = 1; j <= tot && i * prime[j] <= N; j++){notprime[i * prime[j]] = true;if(i % prime[j] == 0){sd[i * prime[j]] = sd[i] / sp[i] * (sp[i] * prime[j] + 1);sp[i * prime[j]] = sp[i] * prime[j] + 1;break;}else{sd[i * prime[j]] = sd[i] * sd[prime[j]];sp[i * prime[j]] = 1 + prime[j];}}}for(int i = 1; i <= N; i++) pre[i] = pre[i - 1] + sd[i]; } int main() {init();ll T = read();while(T--){ll n = read();printf("%lld\n", n * n - pre[n]);}return 0; }

轉載于:https://www.cnblogs.com/Garen-Wang/p/9748916.html

總結

以上是生活随笔為你收集整理的T48568 【zzy】yyy送礼物的全部內容,希望文章能夠幫你解決所遇到的問題。

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