BZOJ4916 神犇和蒟蒻 杜教篩

2022-05-24 23:03:11 字數 1205 閱讀 4366

很久很久以前,有乙隻神犇叫yzy;

很久很久之後,有乙隻蒟蒻叫lty;

請你讀入乙個整數n;1<=n<=1e9,a、b模1e9+7;

請你輸出乙個整數a=\sum_^n;

請你輸出乙個整數b=\sum_^n;

11首先發現第乙個一定是1.。。。

然後發現第二個其實可以表示成

\[\sum_^n\phi(i)*i

\]然後我們令

\[f(i)=\phi(i)*i

\\g(i)=i

\]那麼可以得到

\[ans=sum(n)=\sum_^nf(i)

\]又因為

\[\sum_^n\sum_f(d)g(\frac)=\sum_^n i^2=\frac\]且

\[\sum_^n\sum_f(d)g(\frac)=\sum_^ng(k)\sum_^\rfloor}f(d)=\sum_^ng(k)sum(\lfloor\frac\rfloor)

\]所以有

\[sum(n)=\frac-\sum_^ng(k)sum(\lfloor\frac\rfloor)

\]然後上杜教篩板子。。

#includeusing namespace std;

typedef long long ll;

const ll mod = 1e9 + 7;

const ll n = 1e7 + 10;

const ll inv6 = 166666668;

const ll inv2 = 500000004;

ll prime[n], cnt = 0;

ll phi[n], sum[n], vis[n];

mapmp;

ll add(ll a, ll b)

ll sub(ll a, ll b)

ll mul(ll a, ll b)

void get_prime()

for (ll j = 1; j <= cnt && i * prime[j] < n; j++) else

}} for (ll i = 1; i < n; i++)

sum[i] = add(sum[i - 1], mul(i, phi[i]));

}ll solve(ll n)

return mp[n] = res;

}int main()

bzoj 4916 神犇和蒟蒻 杜教篩

求a ni 1 i 2 和b ni 1 i2 n 1e9,答案模1e9 7 md第一問是什麼鬼?第二問想到是杜教篩 因為不會洲閣篩 但是沒想到用哪個函式和f卷起來。其實考慮到f d d d 要把常數消掉的話,最好就是把f和g d d 卷起來,然後就可以得到 i 1n j if j g ij i 1n...

bzoj4916神犇和蒟蒻 杜教篩

題意 求sigma mu i 2 和sigma phi i 2 這題以前剛學杜教篩的時候就想過沒想到真的有人考出來了 mu的那個明顯怎麼都是1.phi的那個拆開就是phi i i 線性求的時候順便搞一下然後就和求sigma phi i 沒什麼區別了。include include include d...

bzoj4916 神犇和蒟蒻 杜教篩

題面 傳送門一句話,就是讓你求 mu left i 2 right 以及 varphi left i 2 right 的字首和 思路 第一問,瞪了一會兒恍然大悟 這不就是1嗎.因為對於 mu left i 2 right i 2 i ast i 那麼 mu left i 2 right 在 i ne...