zoukankan      html  css  js  c++  java
  • 算法学习(十二)

    1.Integer Factorization(因式分解)

    说明:算法的基本定理,任何整数都可以表示为一个或多个素数的乘积,这样的表示是唯一的,例如:

    1000 = 2 * 2 * 2 * 5 * 5 * 5
    1001 = 7 * 11 * 13
    1002 = 2 * 3 * 167
    1003 = 17 * 59
    1009 = 1009

    问题陈述:

    您将得到几个数字将它们分解为素数的乘积。

    输入数据:第一行中包含分解的整数的数量。

    下面的行中包含一个整数(长度不超过13位)。

    答案:应该包含每一个整数的乘积,表示为p1*p2*p3,p是一些以非降序排列的素数。每个乘积应该用空格分开。

    例子:

    input data:
    5
    1000
    1001
    1002
    1003
    1009
    
    answer:
    2*2*2*5*5*5 7*11*13 2*3*167 17*59 1009

    测试数据:

    30
    1529673724591
    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())  # 测试用例数
     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] = 0
    10     result = [x for x in l if x != 0]
    11     return result
    12 
    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 / p
    21             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 103
    
    answer:
    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 m
    10 
    11 case = debt(P, R, L)
    12 print(case)
    13 
    14 输出:7531
  • 相关阅读:
    java错误分析之junit测试错误(实验一)
    oracle逐步学习总结之oracle分页查询(基础三)
    OracleServer总结进阶之系统分析(进阶完结)
    QMS 的趨勢概述
    Python 類別 class 的繼承 Inheritance
    Python 面向導向語言 Object Oriented Programming Language
    Python 參考資源
    Dynamics 365-CRM又报看不懂的错误了
    Dynamics 365-为什么查到的Record的Id是Guid初始值
    Dynamics 365-如何下载新版本的Tools
  • 原文地址:https://www.cnblogs.com/zt19994/p/7419757.html
Copyright © 2011-2022 走看看