給出乙個質數 p
pp,找他最小的原根。
不知道原根的可以看這個:
——>點我<——
至於找原根,其實我們可以用乙個近似暴力的方法找。
為什麼可以呢,因為它原根分布廣,而且最小的也比較小。
我們就考慮判斷乙個數是否是原根。
對於要檢查 g
gg 是不是模 p
pp 的原根,我們可以列舉 φ(p
)\varphi(p)
φ(p)
的質因子 a
aa,然後檢查 gφ(
p)a≡
1(mo
dp
)g^}\equiv1(\mod\ p)
gaφ(p)
≡1(
modp
) 是否成立,如果成立了,就說明它不是原根。
這道題因為 p
pp 是質數,所以 φ(p
)\varphi(p)
φ(p)
就直接等於 p−1
p-1p−
1 了。
#include
#include
#define ll long long
using
namespace std;
int n, prime[
100001];
int zyz[
10001];
bool np[
100001];
void
get_prime()
for(
int j =
1; j <= prime[0]
&& i * prime[j]
<=
100000
; j++)}
}void
fenjie
(int now)
if(now >
1) zyz[
++zyz[0]
]= now;
}ll ksm
(ll x, ll y)
return re;
}int
main()
}if(yes)
}return0;
}
ybt金牌導航1 2 4 免費餡餅
有乙個直線,在某乙個時刻有乙個餡餅會出現在一些位置,有它的價值。乙個人一開始可以站在直線的任意地方,然後他每個時刻可以不移動,或向任意一邊移動乙個單位或兩個單位。要你求這個人最多能拿多少價值的餡餅。我們看到這道題,弄出最普通的 dp。f i 為對於前 i 個餡餅,接住了第 i 個的最大貢獻。那就是列...
ybt金牌導航1 1 2 乘坐電梯
有乙個電梯,有 n 個人要進電梯。對於每一秒,排在最前面的人有 p 的機率會進電梯 不會再出來 否則不進,別的人都不進。問你 t 秒後,在電梯上的人的期望數量。這道題我們先設 fi,jf fi,j 為在第 i ii 秒之後有 j jj 個人在電梯上的概率。那首先初始化很顯然,f0,0 1f 1 f0...
ybt金牌導航6 1 1 第 k 小數
求序列中第 k 小的數。不能 nlogn 做。這道題可以用分治來做,分治有點二分的味道。它每次選乙個數列中的數,然後把比它大的放在前面,比它小的放在後面,然後它放在中間。這個你可以搞兩個指標來搞,每次找到兩邊然後 swap 那它的位置就是它的排名 你也只確定了它的,但是夠了 然後如果排名就是你要的,...