說明:演算法的基本定理,任何整數都可以表示為乙個或多個素數的乘積,這樣的表示是唯一的,例如:
1000 = 2 * 2 * 2 * 5 * 5 * 51001 = 7 * 11 * 13
1002 = 2 * 3 * 167
1003 = 17 * 59
1009 = 1009
問題陳述:
您將得到幾個數字將它們分解為素數的乘積。
輸入資料:第一行中包含分解的整數的數量。
下面的行中包含乙個整數(長度不超過13位)。
答案:應該包含每乙個整數的乘積,表示為p1*p2*p3,
p是一些以非降序排列的素數。每個乘積應該用空格分開。
例子:
input data:51000
1001
1002
1003
1009answer:
2*2*2*5*5*5 7*11*13 2*3*167 17*59 1009
測試資料:
301529673724591
2340274453339
702466756897
829817084753
27819311669
186806051203
49953067651
34579886191
4695575168147
2100191285953
3716086062137
2556947487959
542629812761
4073412911317
3009916093333
587577561341
288846512519
68274514267
60010816097
2290843100603
2150048292487
72824930317
2821314585503
23823809797
1186835381663
253181641523
52136986493
5271995870831
1000835638687
654425636171
**如下:
1 test_cases = int(input()) #測試用例數23
def eladuosai(n): #
厄拉多塞篩法,構造素數
4 l = list(range(1, n+1))
5 l[0] =0
6for i in range(2, n+1):
7if l[i-1] !=0:
8for j in range(i*2, n+1, i):
9 l[j-1] =0
10 result = [x for x in l if x !=0]
11return
result
1213 prime = eladuosai(3000)
1415
for n in
range(test_cases):
16 date =int(input().split()[0])
17 p_list =
18for p in
prime:
19while date % p ==0:
20 date = date /p
2122
if p >date:
23break
24print('
*'.join(str(m) for m in p_list), end='
') #
格式化輸出
2526 輸出: 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
說明:從數學上講,抵押貸款的工作原理如下:
1.從銀行借了一大筆錢;
2.銀行告訴你它的利率r,即債務的增長速度;
3.在每個月的月底,債務增加了r/12%;
4.在此之後,你向銀行提供了一些預定義的小筆錢以減少債務;
5.債務被認為是穩定的,當它的值降到零(這可能需要數年)。
例如,從銀行取p=80萬美元,利率r=6%,在每個月底支付m=10000美元。
month p p * (r/12)% -m new p1 $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])56
defdebt(p, r, t):7#
每月還款的金額為: [ 本金 x 月利率 x(1+月利率)貸款月數的次方 ] / [(1+月利率)還款月數的次方 - 1]
8 m = round((p * (r / 1200) * (1 + r/1200) ** t) / ((1 + r/1200) ** t - 1))
9returnm10
11 case =debt(p, r, l)
12print
(case)
1314 輸出:7531
演算法學習 Union Find演算法
union find演算法有它的實際用途。多用於動態連通的應用場景。union find演算法是 給出兩個節點,判斷它們是否連通,如果連通,是不需要給出具體的路徑的 舉兩個例子作為主要表現 1 在網路連線中,當發現沒有連線的兩個節點,可以把他們連線起來,一旦節點都連線起來,又能把多餘的線拆除,這時候...
演算法學習 KM演算法
km演算法 用於求二分圖的最佳完美匹配 即權值最大的完美匹配 如果你也是個剛來學習km演算法的人 大概的用途肯定還是知道的吧 還是直接說重點吧 首先 理解km演算法前 必須有以下3個概念 1.可行頂標 對於乙個賦值二分圖g x,y,e,w x,y 代表二分圖的兩邊頂點標號 e代表邊 w代表邊的權值 ...
演算法 演算法學習01
貪婪 可以理解為最簡單基礎的求解方式,特點是 短視性 從這個特點入手很容易理解每一步取其最優的原理。雖然最終結果不一定是最好的,但是一定是較好的而且是最簡便的。因此在不過分追求最優結果或者對速度的要求高於結果的情況下,貪婪是不錯的選擇。分治可以理解為大事化小小事好搞,與貪婪的每一步的 串聯 不同,分...