題意就是題目上的圖的那個樣子。給定的n是乙個n
is a square-free number.
他是乙個無平方因子數。也就是說他分解質因子後質因子的指數是1.
解決這個題分兩步,先說第二步,第二步是 bzoj 3884原題,只是在這個題我們需要算底數是多少而已。
引用一下別人的證明(本人巨菜)
考慮尤拉定理,當(a
,p)=
1 時,aϕ
(p)≡
1(mo
dp) 。
而由此可以很容易得出乙個結論: 當x
≥ϕ(p
) 時,有 a
x≡ax
modϕ
(p)+
ϕ(p)
(mod
p)
若令f(p
)=22
2...
modp
,則f(
1)=0
。 又由於是無窮的式子,22
2...
的指數本來就是超過ϕ(
p)的,所以我們可以改寫成 f
(p)=
2(22
...m
odϕ(
p))+
ϕ(p)
modp
=2f(
ϕ(p)
)+ϕ(
p)mo
dp
因而得到了f(
p)的遞推式。
似乎這麼計算是o(
p)的,但是我們可以對ϕ(
ϕ(..
.ϕ(p
))) 進行分析: 若p
為偶數,則ϕ(
p)≤p
2 ; 若p
為奇數,則
p 存在乙個奇數因子
q ,使得ϕ(
p)存在乙個偶數因子(q
−1) ,轉化為偶數的情況。
由此可知,ϕ(
ϕ(..
.ϕ(p
))) 的計算經過o(
logp
) 次的迭代就到了
1 ,所以f(
p)的計算是o(
p√lo
gp) 的。
然後我們來到第一步:解決這個問題,我們需要知道幾個性質
對於質數p,φ(p) = p - 1。注意φ(1)=1.
尤拉定理:對於互質的正整數a和n,有aφ(n) ≡ 1 mod n。
尤拉函式是積性函式——若m,n互質,φ(mn)=φ(m)φ(n)。
若n是質數p的k次冪,φ(n)=p^k-p^(k-1)=(p-1)p^(k-1),因為除了p的倍數外,其他數都跟n互質。
因為此題時間的限制,我們只能篩選10^7以內的所有素數,在求素數的時候順便就求出尤拉函式,再求出前n項和。
我們來看,如果m是10^7次方,n也是10^7(當然n不可能是10^7),那麼我們就希望看能不能把這個i*n的數字變小,變小就有兩個方法,把n變小,把m變小。
對於φ (i*n)來說,我們可以令n=x*pri,
對於i*n的尤拉值就是求
φ(i*
x*pri
),如果pri和i互質,就是積性的,就可以把pri提出去,φ(i*x)*(pri-1);如果i有因子p的話,我們就可以把m縮小,讓m/p為上線, 不變n。依次遞推。
當m等於1的時候,那麼最終的值就是n的尤拉函式值,當n等於1的時候,就是前m個的尤拉函式值的和。
最方便的情況是先把n素因子分解,然後乙個乙個用就是咯。
#include#include#include#include#include#include#includeusing namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int maxn=1e7;
const int maxm=1e5*7;
ll prime[maxm+10];
bool isprime[maxn+10];
ll phi[maxn+10];
ll sphi[maxn+10];
ll index[50];
//ll sphi[maxn+10];
int cnt;
mapmp;
int res;
void init()
for(ll j=0; j>=1;
a=(a*a)%o;
}return ans;
}ll phi(ll x)
if(x > 1)
ret -= ret / x;
return ret;
}ll f(ll x)
ll sovle(int id,ll n,ll m)
void fen(ll n)
{ //printf("%d\n",cnt);
for(int i=0; i
2016多校聯賽2
d.題意 給2組資料a和b陣列,每次有2種操作 l,r,x 把a陣列第l個到第r個元素全置為x,l,r 查詢 l,r 之間哪些位置滿足a i b i i l i r 並把這些位置的數量統計 一直想很久,沒想到什麼有效的方案,直到看到題解才明白過來,原來線段樹套平衡樹還有這種情況 裡面其實不是平衡樹,...
2016多校聯賽 hdu 5724 Chess
此題就是乙個sg函式的題目,需要找出每一行的sg值,然後異或就可以咯。找sg需要在初始化的時候就找,也就是在t之前,暴力找出所有情況的sg。注意這個題只有20行,所以狀態壓縮一下就可以,每一行有棋子的地方就置為1,每一的地方就是0.include include include include in...
HDU 2822 多校聯賽1
這個題的意思是給你乙個方格,x代表房子,代表空,在連通的x之間行走不需要花費,給你起點座標和終點座標,問從起點到終點的最少花費?對於這個我們可以使用雙bfs來解決這個問題,即遇到了x就用bfs2來填充,邊界又放入bfs1中更新,如下 include include include include u...