醜數三 C語言

2021-10-03 09:24:09 字數 877 閱讀 1493

long min(long a, long b)

return multi/a;}

int nthuglynumber(int n, int a, int b, int c) else

}return l;

}

參考大佬的**和講解而成。這**越想越著迷!

第一採用容斥定理,判斷乙個數前面有多少個醜數

x = an1bn2c*n3+m; n1+n2+n3 = m;已知 a,b,c和x求m0

1.該數只能被a整除 (該數一定是a 的整數倍)

2.該數只能被b整除 (該數一定是b 的整數倍)

3.該數只能被c整除 (該數一定是c 的整數倍)

4.該數只能被a和b同時整除 (該數一定是a、b最小公倍數的整數倍)

5.該數只能被a和c同時整除 (該數一定是a、c最小公倍數的整數倍)

6.該數只能被b和c同時整除 (該數一定是b、c最小公倍數的整數倍)

7.該數只能被a和b和c同時整除(該數一定是a、b、c的最小公倍數的整數倍)

所以,我們只需要分別計算以上七項就能得到結果了!讓我們分別來看(用mcm+下標表示最小公倍數):

情況1 = x/a - 情況4 - 情況5 - 情況7 情況2 = x/b - 情況4 - 情況6 - 情況7 情況3 = x/c -

情況5 - 情況6 - 情況7 情況4 = x/mcm_a_b - 情況7 情況5 = x/mcm_a_c - 情況7 情況6 =

x/mcm_b_c - 情況7 情況7 = x/mcm_a_b_c

第二

寄託於二分演算法

第三迴圈終止的條件,可以直接找到第n個醜數,而不是包含n個醜數的數

leetcode 263 醜數(醜數II)

給了我們乙個醜數的概念,真是為了考驗我們什麼手段都能使出來。首先說一下第乙個題目,判斷乙個數是不是醜數,就是不斷地去除5 除3 除2就行了,當然除之前看看餘數是不是0,否則的話說明已經不能被這三個數整除了,直接結束 public boolean isugly int num return flag ...

C語言 三數和

最接近三數和也是用這種演算法 多設定幾個變數記錄最接近的座標和值即可 會用c語言求最大值就會這道題 給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 n...

刷題 醜數提取及醜數判斷

把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。根據醜數的定義,我們知道醜數一定是由2 3 5乘積得到,可表示成如下公式 我們預設1是第乙個醜數,初始醜數序列為1,從1開...