hihoCoder-week144:机会渺茫 - trash - 博客频道 - CSDN.NET



hihoCoder-week144:机会渺茫 - trash - 博客频道 - CSDN.NET

小Hi最近在追求一名学数学的女生小Z。小Z其实是想拒绝他的,但是找不到好的说辞,于是提出了这样的要求:对于给定的两个正整数N和M,小Hi随机选取一个N的约数N',小Z随机选取一个M的约数M',如果N'和M'相等,她就答应小Hi。

小Z让小Hi去编写这个随机程序,到时候她review过没有问题了就可以抽签了。但是小Hi写着写着,却越来越觉得机会渺茫。那么问题来了,小Hi能够追到小Z的几率是多少呢?


解决思想:

假设N有Nnum个约数,M有Mnum个约数,N和M共有same个相同的约数。对于一个公共约数,在N中抽取到它的概率为1/Nnum,M为1/Mnum,所以同时抽取到这个公共约数的概率为1/(Nnum*Mnum)。一共有same个公共约数,则总概率为same个1/(Nnum*Mnum)相加,则概率为same/(Nnum*Mnum)。

如何求解same:same即为N和M最大公因数的约数个数。


需要实现的算法

1.给定一个数,求解它的约数总个数。

2.给定两个数,求解它们的最大公因数。


实现算法原理:

1.O(sqrt(N))求约数个数法

比如要求解36的约数,我们可以把36如下分解:

36=1*36

36=2*18

36=3*12

36=4*9

36=6*6

注意我们只写出了小于等于sqrt(36)个等式就找到了它(36)所有的约数,共九个。因为当我们找到A的约数B时,也可默认得到A/B是A的另一个约数(如果A/B和B 不相等的话),这样我们就想到,在计算N的约数个数时可以只检查前sqrt(N)个数是否为N的约数,若为,则约数个数加2(若约数的平方等于N时再-1)

具体实现代码如下


Read full article from hihoCoder-week144:机会渺茫 - trash - 博客频道 - CSDN.NET


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts