HDU5528 Count a * b(欧拉函数&数的分解)
题目大意 【HDU5528 Count a b(欧拉函数&数的分解)】设 f ( n ) f(n) f(n)为小于n的a,b使得有 a × bm o dn = ? 0 a\times b\ mod \ n =\not 0 a×b mod n=??0的a,b的组数。现定义 g ( n ) = ∑ d ∣ n f ( d ) g(n)=\sum_{d|n}f(d) g(n)=∑d∣n?f(d),现给出n求g(n)
解题思路 f ( n ) = n ? n ? ∑ i = 0 n ? 1 ∑ j = 0 n ? 1 n ∣ ( i ? j ) = n ? n ? ∑ i = 0 n ? 1 ∑ j = 0 n ? 1 n g c d ( n , i ) ∣ ( i g c d ( n , i ) ? j ) = n ? n ? ∑ i = 0 n ? 1 ∑ j = 0 n ? 1 n g c d ( n , i ) ∣ j = n ? n ? ∑ i = 0 n ? 1 g c d ( n , i ) f(n)=n*n-\sum_{i=0}^{n-1}\sum_{j=0}^{n-1}n|(i*j)\\ =n*n-\sum_{i=0}^{n-1}\sum_{j=0}^{n-1}{n\over gcd(n,i)}|({i\over gcd(n,i)}*j)\\ =n*n-\sum_{i=0}^{n-1}\sum_{j=0}^{n-1}{n\over gcd(n,i)}|j\\ =n*n-\sum_{i=0}^{n-1}gcd(n,i) f(n)=n?n?i=0∑n?1?j=0∑n?1?n∣(i?j)=n?n?i=0∑n?1?j=0∑n?1?gcd(n,i)n?∣(gcd(n,i)i??j)=n?n?i=0∑n?1?j=0∑n?1?gcd(n,i)n?∣j=n?n?i=0∑n?1?gcd(n,i)
此时需要用到一个常用套路 ∑ i = 1 n g c d ( n , i ) = ∑ d ∣ n d φ ( n d ) \sum_{i=1}^{n}gcd(n,i)=\sum_{d|n}d\varphi({n\over d}) ∑i=1n?gcd(n,i)=∑d∣n?dφ(dn?)
那么原式就可以化成
= n ? n ? ∑ d ∣ n d φ ( n d ) =n*n-\sum_{d|n}d\varphi({n\over d}) =n?n?d∣n∑?dφ(dn?)
将 f ( n ) f(n) f(n)带入
g ( n ) = ∑ d ∣ n d 2 ? ∑ d ∣ n ∑ i ∣ d i φ ( d i ) = ∑ d ∣ n d 2 ? ∑ i ∣ n i ∑ i ∣ d &
d ∣ n φ ( d i ) = ∑ d ∣ n d 2 ? ∑ i ∣ n i ∑ k ∣ n i φ ( k ) g(n)=\sum_{d|n}d^2-\sum_{d|n}\sum_{i|d}i\varphi({d\over i})\\ =\sum_{d|n}d^2-\sum_{i|n}i\sum_{i|d\&
d|n}\varphi({d\over i})\\ =\sum_{d|n}d^2-\sum_{i|n}i\sum_{k|{n\over i}}\varphi(k)\\ g(n)=d∣n∑?d2?d∣n∑?i∣d∑?iφ(id?)=d∣n∑?d2?i∣n∑?ii∣d&d∣n∑?φ(id?)=d∣n∑?d2?i∣n∑?ik∣in?∑?φ(k)
此时需要用到欧拉函数的一个性质
∑ d ∣ n φ ( d ) = n \sum_{d|n}\varphi(d)=n d∣n∑?φ(d)=n
原式就可以换成
= ∑ d ∣ n d 2 ? ∑ i ∣ n i n i = ∑ d ∣ n d 2 ? ∑ i ∣ n n =\sum_{d|n}d^2-\sum_{i|n}i{n\over i}\\ =\sum_{d|n}d^2-\sum_{i|n}n =d∣n∑?d2?i∣n∑?iin?=d∣n∑?d2?i∣n∑?n
接下来分解因数即可。本题时限卡得比较严格,分解时需要先处理出质数,再做质因数分解
AC代码
#include
using namespace std;
typedef unsigned long long ULL;
typedef pair pii;
const int maxn=sqrt(1e9)+1;
int tot=0;
pii pri[100];
ULL ans=0;
int cnt=0;
int tots=0;
int prime[maxn];
bool p[maxn];
void init()
{
memset(p,1,sizeof(p));
for(int i=2;
i
推荐阅读
- HDU 5528【2015长春现场赛 B】 Count a * b
- 类欧几里得算法|[类欧几里得算法 数论] BZOJ 2987 Earthquake
- [数论] Codeforces 819D R #421 D.Mister B and Astronomers & 516E R #292 E. Drazil and His Happy Friends
- 模板 poj2947 Widget Factory 高斯消元
- 【扩展欧几里得】练习题
- 扩展欧几里得【数论
- 数论|hdu 5322 Hope(分治+NTT)
- HDU 5528 Count a × b
- 线性同余方程组
- 数论|AtCoder Beginner Contest 156 C.Rally