【題意】給定n,求σφ(i),n<=10^10。
【演算法】杜教篩
【題解】
定義$s(n)=\sum_^\varphi(i)$
杜教篩$\sum_^(\varphi *i)(i)=\sum_^\sum_\varphi(d)=\sum_^\sum_^}\varphi(d)$
根據$id=\varphi*i$,$\sum_^(\varphi*i)(i)=\frac$
所以$s(n)=\frac-\sum_^s(\frac)$
然後遞迴進行即可,預處理前$n^}$項,則複雜度為o(n^(2/3))。
本質上是對於id=φ*i,其中i和id的字首和都可以直接計算,所以可以用杜教篩處理φ的字首和。
#include#includeview code#include
#include
#define ll long long
using
namespace
std;
const
int sq=100000,pre=5000000,mod=1e9+7,inv=(mod+1)/2
;int a[100010],phi[pre+5
],prime[pre],tot;
ll n;
bool vis[pre+5
];int
solve(ll n)
return a[n/n]=ans;
}int
main()
for(int j=1;j<=tot&&i*prime[j]<=pre;j++)
phi[i*prime[j]]=phi[i]*(prime[j]-1
); }
phi[i]=(phi[i]+phi[i-1])%mod;
}memset(a,-1,sizeof
(a));
printf("%d
",solve(n));
return0;
}
51nod1239 尤拉函式之和
求 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 ...
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...