Ex3-23 親兄弟問(wèn)題
« 問(wèn)題描述:
給定n 個(gè)整數(shù)0 1 1 , , , n- a a a 組成的序列。序列中元素i a 的親兄弟元素k a 定義為:
min{ | } k i j n j j i a = a a ³ a
< <
。
親兄弟問(wèn)題要求給定序列中每個(gè)元素的親兄弟元素的位置。元素i a 的親兄弟元素為k a
時(shí),稱k 為元素i a 的親兄弟元素的位置。當(dāng)元素i a 沒(méi)有親兄弟元素時(shí),約定其親兄弟元素
的位置為-1。
例如,當(dāng)n=10,整數(shù)序列為6,1,4,3,6,2,4,7,3,5 時(shí),相應(yīng)的親兄弟元素位
置序列為:4,2,4,4,7,6,7,-1,9,-1。
« 編程任務(wù):
對(duì)于給定的n個(gè)整數(shù)0 1 1 , , , n- a a a 組成的序列,試用抽象數(shù)據(jù)類型棧,設(shè)計(jì)一個(gè)O(n)
時(shí)間算法,計(jì)算相應(yīng)的親兄弟元素位置序列。
« 數(shù)據(jù)輸入:
由文件input.txt提供輸入數(shù)據(jù)。文件的第1 行有1 個(gè)正整數(shù)n,表示給定給n個(gè)整數(shù)。
第2 行是0 1 1 , , , n- a a a 。
« 結(jié)果輸出:
程序運(yùn)行結(jié)束時(shí),將計(jì)算出的與給定序列相應(yīng)的親兄弟元素位置序列輸出到output.txt
中。
輸入文件示例 輸出文件示例
input.txt
10
4 2 4 4 7 6 7 -1 9 -1
output.txt
6 1 4 3 6 2 4 7 3 5
標(biāo)簽:
61516
laquo
min
序列
上傳時(shí)間:
2013-12-17
上傳用戶:shizhanincc
Euler函數(shù):
m = p1^r1 * p2^r2 * …… * pn^rn ai >= 1 , 1 <= i <= n
Euler函數(shù):
定義:phi(m) 表示小于等于m并且與m互質(zhì)的正整數(shù)的個(gè)數(shù)。
phi(m) = p1^(r1-1)*(p1-1) * p2^(r2-1)*(p2-1) * …… * pn^(rn-1)*(pn-1)
= m*(1 - 1/p1)*(1 - 1/p2)*……*(1 - 1/pn)
= p1^(r1-1)*p2^(r2-1)* …… * pn^(rn-1)*phi(p1*p2*……*pn)
定理:若(a , m) = 1 則有 a^phi(m) = 1 (mod m) 即a^phi(m) - 1 整出m
在實(shí)際代碼中可以用類似素?cái)?shù)篩法求出
for (i = 1 i < MAXN i++)
phi[i] = i
for (i = 2 i < MAXN i++)
if (phi[i] == i)
{
for (j = i j < MAXN j += i)
{
phi[j] /= i
phi[j] *= i - 1
}
}
容斥原理:定義phi(p) 為比p小的與p互素的數(shù)的個(gè)數(shù)
設(shè)n的素因子有p1, p2, p3, … pk
包含p1, p2…的個(gè)數(shù)為n/p1, n/p2…
包含p1*p2, p2*p3…的個(gè)數(shù)為n/(p1*p2)…
phi(n) = n - sigm_[i = 1](n/pi) + sigm_[i!=j](n/(pi*pj)) - …… +- n/(p1*p2……pk)
= n*(1 - 1/p1)*(1 - 1/p2)*……*(1 - 1/pk)
標(biāo)簽:
Euler
lt
phi
函數(shù)
上傳時(shí)間:
2014-01-10
上傳用戶:wkchong