哈尔滨题目B
?B : 一個數有K個約數(算自己)就叫K維數。求第n大的K維數。n <= 10000, K <= 100且K為質數或完全平方數。
?
解法:
任意自然數可以表示為: 2^x * 3^y * 5^z * ....
上述數的約數個數為(x+1)*(y+1)*(z+1)*...
1 若k為質數, 則y=z=...=0, x=k-1.? 最小的k維數就是2^(k-1),? 第n大的k維數就是用第n個質數替換掉2; 即 p(n) ^(k-1)
2 若k為完全平方數:
?? k=1時, n=1時答案1,其他不存在
?? k>1時: 假設 k = (a * b * c * ... )^2, 其中,a,b,c,,,都是質數且由小到大有序; 那么最小的k維數就是
?? p(1)^(a-1) * p(2)^(a-1) * p(3)^(b-1)? * p(3)^(b-1) * p(4)^(c-1) * p(4)^(c-1) ***
?
再繼續求第n大的k維數時, 涉及的計算比較復雜了。
總結
- 上一篇: 哈尔滨题目A
- 下一篇: string 与 c style 字符串