對於給定的元\(a,b,c,n\)
設\(f(i)=\lfloor\frac\rfloor\)
求\[f(a,b,c,n)=\sum_0^nf(i)
\]\[g(a,b,c,n)=\sum_0^nf(i)^2
\]\[h(a,b,c,n)=\sum_0^ni\cdot f(i)
\]\[\lfloor\frac\rfloor=\lfloor\frac\rfloor+i\lfloor \frac\rfloor +\lfloor \frac\rfloor
\]\[f(a,b,c,n)=f(a\mod c,b\mod c,c,n)+\frac\rfloor}+(n+1)\lfloor\frac\rfloor
\]\[f(a,b,c,n) =\sum_0^n f(i)
\]\[= \sum_^n\sum_^ 1
\]\[= \sum_^n\sum_^[j
\[= \sum_^\sum_^[j
其中\[[j<\lfloor\frac\rfloor] =[j<\lceil\frac\rceil]
\]\[=[cj
\[=[ai>cj-b+c-1]
\]\[=[i>\lfloor\frac\rfloor]
\]\[f(a,b,c,n)= \sum_^\sum_^[i>\lfloor\frac\rfloor]
\]\[=\sum_^ n-\lfloor\frac\rfloor
\]\[f(a,b,c,n)=n\cdot f(n)-f(c,-b+c-1,a,f(n)-1)
\]每次操作交換了\(a,c\)然後再次取模,複雜度是\(o(\log n)\)
遞迴邊界是\(a=0\)
\(g(a,b,c,n)=\sum_0^nf(i)^2\)
設\(\lfloor \frac\rfloor=x,\lfloor \frac\rfloor=y\)
\[\lfloor\frac\rfloor^2=(\lfloor\frac\rfloor+ix+y)^2
\]\[=\lfloor\frac\rfloor^2+2\lfloor\frac\rfloor\cdot (ix+y)+(ix+y)^2
\]\[g(a,b,c,n)=
\]\[g(a\mod c,b\mod c,c,n)+2x h(a\mod c,b\mod c,n)+2y f(a\mod c,b\mod c,c,n)
\]\[+\frac+(n+1)y^2+n(n+1)xy
\]\[g(a,b,c,n) =\sum_0^nf(i)^2
\]\[= 2 \sum_^n\frac+\frac
\]\[=2 \sum_^n\sum_^j+\frac
\]\[= 2\sum_^n\sum_^(j+\frac)[j
\[= 2\sum_^\sum_^(j+\frac)[j
\[=2 \sum_^\sum_^(j+\frac)[i>\lfloor\frac\rfloor]
\]\[=2\sum_^ (j+\frac)(n-\lfloor\frac\rfloor)
\]\[g(a,b,c,n)=nf(n)^2-2h(c,-b+c-1,a,f(n)-1)-f(c,-b+c-1,a,f(n)-1)
\]\(h(a,b,c,n)=\sum_0^ni\cdot f(i)\)
\[i\cdot \lfloor\frac\rfloor=i\cdot (\lfloor\frac\rfloor+i\lfloor \frac\rfloor +\lfloor \frac\rfloor)
\]\[i\cdot \lfloor\frac\rfloor=i\cdot \lfloor\frac\rfloor+i^2\lfloor \frac\rfloor +i\lfloor \frac\rfloor
\]\[h(a,b,c,n)=h(a\mod c,b\mod c,c,n)+\frac\rfloor}+\frac\rfloor}
\]\[h(a,b,c,n)=\sum_i^n i\cdot f(i)
\]\[= \sum_^n\sum_^ i
\]\[= \sum_^\sum_^i\cdot [j<\lfloor\frac\rfloor]
\]\[=\sum_0^\sum_^n i\cdot [i>\lfloor\frac\rfloor]
\]設\(f'(i)=\lfloor\frac\rfloor\)
\[h(a,b,c,n)= \sum_^\sum_^i
\]\[= \sum_^\frac
\]\[= \sum_^ \frac
\]\(h(a,b,c,n)=\frac\)
這個多個函式的情況,如果直接遞迴寫複雜度極高
所以需要把訪問到的所有狀態存下來遞推,就能保證複雜度\(o(\log n)\)
模板題傳送門
#includeusing namespace std;
#define mod1(x) ((x>=p)&&(x-=p))
#define mod2(x) ((x<0)&&(x+=p))
#define reg register
typedef long long ll;
#define rep(i,a,b) for(reg int i=a,i##end=b;i<=i##end;++i)
#define drep(i,a,b) for(reg int i=a,i##end=b;i>=i##end;--i)
#define pb push_back
template inline void cmin(t &a,t b)
template inline void cmax(t &a,t b)
const ll inv2=(p+1)/2,inv6=qpow(6);
//ll f(ll a,ll b,ll c,ll n);
//ll g(ll a,ll b,ll c,ll n);
//ll h(ll a,ll b,ll c,ll n);
ll d2(ll n)
ll d3(ll n)
ll sa[n],sb[n],sc[n],sn[n];
ll f[n],g[n],h[n];
int cnt;
void precalc(ll a,ll b,ll c,ll n)
}/*ll f(ll a,ll b,ll c,ll n)
ll t=(a*n+b)/c;
ll ans=t%p*n%p-f(c,-b+c-1,a,t-1);
ans=(ans%p+p)%p;
return ans;
}ll g(ll a,ll b,ll c,ll n)
ll t=(a*n+b)/c;
ll ans=(t%p)*(t%p)%p*(n%p)%p-2*h(c,-b+c-1,a,t-1)-f(c,-b+c-1,a,t-1)%p;
ans=(ans%p+p)%p;
return ans;
}ll h(ll a,ll b,ll c,ll n)
ll t=(a*n+b)/c;
ll ans=(t%p*d2(n)%p*2%p-g(c,-b+c-1,a,t-1)-f(c,-b+c-1,a,t-1))%p;
ans=(ans*inv2%p+p)%p;
return ans;
}*/int main() else
if(a==0) g[i]=(b/c)*(b/c)%p*(n+1)%p;
else if(a>=c || b>=c) else
if(a==0) h[i]=d2(n)%p*(b/c)%p;
if(a>=c || b>=c) else
} printf("%lld %lld %lld\n",f[1],g[1],h[1]);
}}
類歐幾里得演算法
比較快速地算出下面的式子 f n,a,b,c,k 1,k 2 sum limits n x lfloor frac rfloor 不妨假設現在 a geq c 或 b geq c 那麼 sum limits n x lfloor frac rfloor sum limits n x lfloor f...
類歐幾里得演算法
這個演算法用於求一條直線下整點個數,我們定義 f a,b,c,n sum lfloor frac rfloor 其他幾個乘係數的擴充套件不想學了tat a ge c 或 b ge c 當 a ge c 或 b ge c 時,我們考慮把分子對 c 的商和餘數分別提出來,那麼有 begin f a,b,...
類歐幾里得演算法
萬惡之源 首先推一下可以發現,我們可以分 位 計算。設二進位制下第 k 對答案的貢獻為 mathrm 則 mathrm sum limits texttt sum limits left lfloor frac right rfloor bmod 2 sum limits left lfloor f...