题目大意:
输入n(2<=n<=4000000)输出gcd(i, j) (1<=igcd(1, 2) +
gcd(1, 3) + gcd(2, 3) +
gcd(1, 4) + gcd(2, 4)+ gcd(3, 4) +
+......+
…… + gcd(n-1, n)
设:f(n) = gcd(1, n)+gcd(2, n)+gcd(3, n)+ … + gcd(n-1, n)
设: S(n)= f(2)+f(3)+ … + f(n)
那么:S(n)=s(n-1)+f(n)
我们把f(n)求出来,再递推一下。
对于:gcd(x, n)= i, 那么i一定是n的因数。
假设:g(n, i) 表示满足gcd(x, n)=i 并且x<n的个数。
那么:f(n) = i*gcd(n, i) i是n的约数
gcd(x, n)= i 等价gcd(x/i, n/i)=1。
所有gcd(x, n)= i等于gcd(x/i, n/i)=1的个数。g(n, i)=phi[n/i]
Phi[] 欧拉函数。
所以:f(n) = i* Phi[n/i] i是n的约数
我们对于每个i枚举倍数n。
#include