P3708-koishi的数学题【差分】
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                P3708-koishi的数学题【差分】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                正題
題目鏈接:https://www.luogu.com.cn/problem/P3708
題目大意
定義f(x)=∑i=1nx%if(x)=\sum_{i=1}^nx\% if(x)=∑i=1n?x%i
求每個f(i)f(i)f(i)
解題思路
考慮枚舉模數iii,對與每個xxx會產生x%ix\% ix%i的貢獻,也就是對與連續的一段是0,1,2,3,...i?10,1,2,3,...i-10,1,2,3,...i?1的貢獻,賦值的是一個等差數列所以兩邊差分即可。
時間復雜度O(nlog?n)O(n\log n)O(nlogn)
codecodecode
#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const ll N=2e6+10; ll n,a[N],b[N]; int main() {scanf("%lld",&n);for(ll i=2;i<=n;i++){for(ll j=0;j<=n;j+=i)a[j+1]++,a[j+i]--,b[j+i]-=i-1;}for(ll i=1;i<=n;i++)a[i]+=a[i-1];for(ll i=1;i<=n;i++)b[i]+=a[i];for(ll i=1;i<=n;i++)b[i]+=b[i-1];for(ll i=1;i<=n;i++)printf("%lld ",b[i]); }總結
以上是生活随笔為你收集整理的P3708-koishi的数学题【差分】的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 新疆薰衣草几月开花 关于新疆薰衣草的介绍
 - 下一篇: #20071-[NOIP2020模拟赛B