• python笔记1(杨辉三角、质数问题)


    1、math的一些常用函数

    print(round(2.5)) #round()是四舍六入,五取偶;不是math下面的函数
    print(round(1.2))
    import math
    print(math.floor(2.5)) #向下取整
    print(math.ceil(2.5))  #向上取整
    print(math.sqrt(3))   #开平方
    print(math.pi) #pai
    print(math.e) #自然常数

    2、杨辉三角

    lst=[]
    n=6
    for i in range(n):
        row=[1]
        lst.append(row)
        if i==0:
            continue
        for j in range(i-1):
             row.append(lst[i-1][j]+lst[i-1][j+1])
        else:
            row.append(1)
    print(lst)

    结果:

    [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]
    #改进
    n=6
    p=[]
    for i in range(n): #每一个行遍历
        row=[1] #每行开头都给一个1 
        for k in range(i):  #每一行尾部给1
            row.append(1) if k==i-1 else row.append(0) #改进:可以直接给每一行的元素全部赋值为1
        p.append(row)  #,后面再对中间的数进行重新赋值
        if i==0: #对于第一行特殊对待,不进行下面的赋值运算
            continue
        for j in range(1,i//2+1): #对每一行的一半元素进行处理直到中间的元素
            val=p[i-1][j-1]+p[i-1][j]#每次以上一行的元素进行相加
            row[j]=val #每一个元素加入到row中
            if j!=i-j: #这是对奇数个数的中间点跳过
                row[-j-1]=val #利用列表的倒序来对称赋值
    print(p)            #如p[-1]为列表p的倒数第一个

    结果:

    [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]

     打印杨辉三角第n行第m个数:

    #改进
    a=6
    lst=[]
    k=5
    for i in range(a):
        row=[1]*(i+1)
        lst.append(row)
        if i==0:
            continue
        for j in range(1,i//2+1):
            val=lst[i-1][j-1]+lst[i-1][j]
            row[j]=val
            if j!=i-j:
                row[-j-1]=val
    print(lst[a-1][k-1])    #打印第a行,第k列

    ### 改进:根据杨辉三角定理:第n行的m个数可以表示为C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数C(n,r)=n!/(r!(n-r)!)

    n=10
    k=5
    n,r=n-1,k-1
    d=n-r
    lst=[] #用来装n,r,d
    temp=1
    for i in range(1,n+1):  
        temp*=i
        if i==r:     #利用一个循环把阶乘过程中所要截取的阶乘用if语句截断下来
            lst.append(temp)  #最先加进去的是最小的,所以与if的先后无关
        if i==d:
            lst.append(temp)  #即[0][1],[2]分别是d,r以及n
        if i==n:
            lst.append(temp)  #三个条件不要写在一起了,因为逻辑不允许,如果有两两相等就会出错
    print(lst[2]//(lst[1]*lst[0])) 

    3、求10万以内的质数方法时间效率的比较

    #改进
    import
    math n=100000 p=[] count=0 flag=True start=datetime.datetime.now() for x in range(2,n): for i in p: count+=1 if x%i==0: flag=False break if i>=math.ceil(x**0.5): flag=True break if flag: p.append(x) delta=(datetime.datetime.now()-start).total_seconds() print(len(p)) print(count) print(delta)

    结果:

    9592
    754026
    0.447888

    import math
    import datetime
    n=100000
    p=[]
    count=0
    start=datetime.datetime.now()
    for x in range(2,n):
        for i in p:
            count+=1
            if(x%i)==0:
                break
        else:
            p.append(x)
    delta=(datetime.datetime.now()-start).total_seconds()
    print(len(p))
    print(count)
    print(delta)

    结果:

    9592
    46314476
    9.33169
  • 相关阅读:
    9月7日总结
    Arbitrage题解
    杀蚂蚁题解
    8月11日总结
    8月10总结
    PHP 关于获取客户端ip的方法
    PHP内置函数大全
    PHP header函数设置http头
    获取两个日期之间的全部的日期数据(包括两个日期)
    根据周日获取这周的周日到周六的日期(周日为这周的第一天)
  • 原文地址:https://www.cnblogs.com/mapone/p/12017170.html
Copyright © 2020-2023  润新知