演算法學習(十二),演算法學習

來源:互聯網
上載者:User

演算法學習(十二),演算法學習
1.Integer Factorization(因式分解)

說明:演算法的基本定理,任何整數都可以表示為一個或多個素數的乘積,這樣的表示是唯一的,例如:

1000 = 2 * 2 * 2 * 5 * 5 * 51001 = 7 * 11 * 131002 = 2 * 3 * 1671003 = 17 * 591009 = 1009

問題陳述:

您將得到幾個數字將它們分解為素數的乘積。

輸入資料:第一行中包含分解的整數的數量。

下面的行中包含一個整數(長度不超過13位)。

答案:應該包含每一個整數的乘積,表示為p1*p2*p3,p是一些以非降序排列的素數。每個乘積應該用空格分開。

例子:

input data:510001001100210031009answer:2*2*2*5*5*5 7*11*13 2*3*167 17*59 1009

測試資料:

30152967372459123402744533397024667568978298170847532781931166918680605120349953067651345798861914695575168147210019128595337160860621372556947487959542629812761407341291131730099160933335875775613412888465125196827451426760010816097229084310060321500482924877282493031728213145855032382380979711868353816632531816415235213698649352719958708311000835638687654425636171

 

代碼如下:

 1 test_cases = int(input())  # 測試案例數 2  3 def eladuosai(n): # 厄拉多塞篩法,構造素數 4     l = list(range(1, n+1)) 5     l[0] = 0 6     for i in range(2, n+1): 7         if l[i-1] != 0: 8             for j in range(i*2, n+1, i): 9                 l[j-1] = 010     result = [x for x in l if x != 0]11     return result12 13 prime = eladuosai(3000)14 15 for n in range(test_cases):16     date = int(input().split()[0])17     p_list = []18     for p in prime:19         while date % p == 0:20             date = date / p21             p_list.append(p)22         if p > date:23             break 24     print('*'.join(str(m) for m in p_list), end=' ')   # 格式化輸出25 26 輸出: 131*131*379*479*491 191*241*269*331*571 193*197*199*227*409 103*131*293*431*487 53*67*107*211*347 127*137*167*239*269 349*439*571*571 263*409*563*571 149*307*409*419*599 
     139*257*271*401*541 229*257*263*409*587 173*223*353*359*523 61*137*353*419*439 281*283*317*349*463 173*251*317*449*487 83*257*277*277*359 103*107*227*263*439 67*71*211*251*271
     53*113*127*257*307 131*193*373*421*577 89*227*419*499*509 53*83*227*233*313 151*211*349*487*521 193*401*541*569 101*239*271*419*433 71*137*211*281*439 89*109*113*199*239
     211*239*313*569*587 79*157*397*439*463 97*109*277*439*509

 

2.Mortgage Calculator(貸款計算)

說明:從數學上講,抵押貸款的工作原理如下:

1.從銀行借了一大筆錢;

2.銀行告訴你它的利率R,即債務的增長速度;

3.在每個月的月底,債務增加了R/12%;

4.在此之後,你向銀行提供了一些預定義的小筆錢以減少債務;

5.債務被認為是穩定的,當它的值降到零(這可能需要數年)。

例如,從銀行取P=80萬美元,利率R=6%,在每個月底支付M=10000美元。

Month     P        P * (R/12)%      -M       new P  1    $800000       $4000       -$10000    $794000  2    $794000       $3970       -$10000    $787970  3    $787970       $3940       -$10000    $781910 ... 12    $732325       $3662       -$10000    $725987 ... 24    $654138       $3271       -$10000    $647408 ... 103     $4188         $21        -$4209         $0

因此,在103個月(約為8.5年)之後,債務可能會得到償還。最後的支付當然可能小於M(因為P不需要變成負數)。

輸入資料:包含貸款大小P、利率R和時間長度的值L,在幾個月內償還。

答案:應該包含每月支付的M整數(如果你得到非整數結果,把它增加到最近的整數)。

例如:

input data:800000 6 103answer:9957

測試資料:

600000 8 114

代碼如下:

 1 data = input().split() 2 P = int(data[0]) 3 R = int(data[1]) 4 L = int(data[2]) 5  6 def debt(p, r, t): 7     # 每月還款的金額為: [ 本金 x 月利率 x(1+月利率)貸款月數的次方 ] / [(1+月利率)還款月數的次方 - 1]  8     m = round((p * (r / 1200) * (1 + r/1200) ** t) / ((1 + r/1200) ** t - 1))   9     return m10 11 case = debt(P, R, L)12 print(case)13 14 輸出:7531

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.