求∑i
=1nφ
(i)
n<=10^10
這道題和莫比烏斯函式一行,都可以通過神奇的推導的出結論。
我們設ϕ(n
)=∑i
=1nφ
(i)
眾所周知,∑d
|nφ(
d)=n
那麼,φ(
n)=n
−∑d|
n,d(d)
於是ϕ(n
)=∑i
=1n(
i−∑d
|i,d
(d))
ϕ(n)=n∗
(n+1
)2−∑
i=2n
∑d|i
,d(d)
ϕ(n)
=n∗(
n+1)
2−∑i
d=2n
∑d=1
⌊nid
⌋φ(d
) ϕ(
n)=n
∗(n+
1)2−
∑i=2
n∑d=
1⌊ni
⌋φ(d
) ϕ(
n)=n
∗(n+
1)2−
∑i=2
nϕ(⌊
ni⌋)
於是和那道題一樣做就好了。
還有一種做法。
這個問題的本質就是1~n中兩兩互質的數的對數。
那麼我們可以用反演搞出來乙個式子an
s=∑i
=1nμ
(i)⌊
ni⌋2
然後就分塊搞就行了。
不過還是需要莫比烏斯函式字首和。
參照51nod1244
#include
#include
#include
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define rep(i,a) for(int i=last[a];i;i=next[i])
#define n 5000000
using namespace std;
typedef long long ll;
const int mo=1000000007;
const int mo=2333333;
const int ni=500000004;
int phi[n+5],p[n+5],l;
intlast[mo],next[mo];
bool bz[n+5];
ll n,t[mo],v[mo];
void add(int
x,ll y,ll z)
ll calc(ll x)
int main()
phi[k]=phi[i]*(p[j]-1);}}
phi[1]=1;fo(i,1,n) (phi[i]+=phi[i-1])%=mo;
scanf("%lld",&n);printf("%lld",calc(n));
}
51nod 1239 尤拉函式之和
求 n i 1 i 1 n 10 杜教篩第二道裸題。必要結論 i n i n 證明 設f n i n i 將n分解質因數,n p qii 利用莫比烏斯函式裡學到的乙個性質,可以得到 f n f pq ii f pq qk 0 pk q k 1p k pk 1 1 p q f n n 設s n n i...
51Nod 1239 尤拉函式之和
acm模版 這個題和那個 51nod 1244 莫比烏斯函式之和 的方法幾乎一模一樣,差別就是推導公式的結果不一樣罷了,但是形式是一樣的。推導如下 設 f n i 1 n i 通過尤拉函式的性質我們可以知道 d n d n 所以呢,n n d n,d d f n i 1n i d i,d d f n...
51Nod 1239 尤拉函式之和
s n i 1n i n 是尤拉函式 給定n,求s n mod109 7 2 n 1010 這是我學杜教篩做的第二個題,第乙個就是和這個非常相似的求莫比烏斯函式之和 給大家推薦唐老師的一篇文章,個人感覺講的非常好,我就是在這裡學的 尤拉函式的乙個性質是這樣的n d n d 所以就有n n 1 2 i...