2016多校聯賽 hdu 5728 PowMod

2021-07-15 06:59:49 字數 2413 閱讀 8972

題意就是題目上的圖的那個樣子。給定的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...