題目鏈結
分析:
這道題看的是唐老師的blog
感覺還是一知半解,然而學校裡的dalao都去長沙了
只留下我們這些蒟蒻(然而蒟蒻沒有dalao的點撥怎麼學習啊。。。)
用了將近一小時,終於理解了,嘗試著來化簡一下:
我們要求的是
在化簡之前,先提出phi函式的乙個性質:
我們就從這個式子下手:
具體的:
好像有兩種實現方法:分塊法 or 記憶化搜尋
我在這裡用的記憶化搜尋,同時還要配合簡單的hash:
int hash(ll x) //簡單的hash
非常簡陋的hash,但是竟然管用。。。
空間卡的挺緊,只能開乙個ll的陣列
注意取%
#include
#include
#include
#include
#define ll long long
using namespace std;
const int maxn=1e7+5;
const int n=1e6+5;
const ll p=1000000007;
const ll ni=500000004;
ll h[maxn],n;
int phi[n],tot=0,sshu[n],sum[n],f[maxn];
bool no[n];
void make()
for (int j=1;j<=tot&&sshu[j]*i
no[sshu[j]*i]=1;
if (i%sshu[j]==0)
phi[i*sshu[j]]=phi[i]*phi[sshu[j]];}}
for (int i=1;i1]+phi[i])%p;
}int hash(ll x) //簡單的hash
ll cal(ll n)
x=(x
%p+p)%p;
h[l]=n; f[l]=x;
returnx;}
int main()
printf("%lld\n",cal(n));
return
0;}
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...