BZOJ4916 神犇和蒟蒻

2022-08-19 22:36:15 字數 1640 閱讀 8464

portal

求:\[\sum_^ \mu(i ^ 2) ~~~ \sum_^ \varphi(i ^ 2) \\

n \leq 1e9

\]第一問:我有個寫法可惜這裡空間太小寫不下:

...

printf("1\n");

...

下面我們來考慮第二問:

對於乙個素因子\(p\),我們有:

\[\varphi(p^k) = (p - 1) \times p ^\\

\varphi(p ^ ) = (p - 1) \times p ^ \\

= (p - 1) \times p ^ \times p^\\

= \varphi(p ^ k) * p ^ k

\]所以:

\[f(n) = \varphi(n ^ 2) \\\sum_^ \varphi(i ^ 2) = \sum_^ i \times \varphi(i) \\

\]構造$g(n) = n $, 有:

\[(f * g)(n) = \sum_ d \times \varphi(d) \times \frac\\

= n \sum_ \varphi(d) = n ^ 2

\]有:$$1^2 + 2^2 + 3^2+ \dots + n^2 = \frac$$

然後杜教篩搞一下就可以了。

#include #include #include using namespace std;

#define rep(i, a, b) for(int i = (a), i##_end_ = (b); i <= i##_end_; ++i)

#define drep(i, a, b) for(int i = (a), i##_end_ = (b); i >= i##_end_; --i)

#define clar(a, b) memset((a), (b), sizeof(a))

#define debug(...) fprintf(stderr, __va_args__)

typedef long long ll;

typedef long double ld;

int read()

void write(int x)

const int maxn = 3000009, mod = (int)1e9 + 7;

__gnu_pbds :: cc_hash_table sum;

ll isnprime[maxn], prime[maxn], tot;

ll phi[maxn], prefix[maxn];

void init()

for (int j = 1, k; j < maxn && (k = prime[j] * i) < maxn; ++j) else phi[k] = (prime[j] - 1) * phi[i];

} }rep (i, 1, maxn - 1) prefix[i] = (prefix[i - 1] + phi[i] * 1ll * i % mod) % mod;

}ll calcphisquare(int val)

return sum[val] = res;

}void solve()

int main()

BZOJ 4916 神犇和蒟蒻

很久很久以前,有乙隻神犇叫yzy 很久很久之後,有乙隻蒟蒻叫lty 請你讀入乙個整數n 1 n 1e9,a b模1e9 7 請你輸出乙個整數a sum n 請你輸出乙個整數b sum n 1by monster yi 杜教篩 推導詳見 其中ni2和ni6分別是2和6的逆元,是用快速冪求出來的 inc...

bzoj4916 神犇和蒟蒻

求 i 1n i2 和 i 1n i2 n 1e9,答案對1e9 7取模 被題目名字和ac人數騙進來,一看題還嚇了一跳 難道這是什麼最新的操作.jpg 然後仔細看了一眼題 mdzz這不是隨便做嗎?的話除了i 1不是全部為0嗎?的話把式子拆出來就可以發現 i2 i i 然後就直接上杜教篩就好了。隱藏水...

bzoj4916 神犇和蒟蒻

首先看第乙個式子,根據莫比烏斯函式的性質可知,當i 1時,i 1 其它都是0.所以輸出1 然後看第二個式子。根據尤拉函式的性質,平方的部分多出來的質因數已經出現過,所以式子變成 n i 1i i 這個用杜教篩來求。include include include include using names...