美文网首页
99乘法表,菱形,fib,素数(python)

99乘法表,菱形,fib,素数(python)

作者: 秋幻旎苏 | 来源:发表于2018-08-04 20:42 被阅读0次

    一.打印99乘法表

    #打印99乘法表
    for i in range(1,10): #[1,9]
        for j in range(1,i+1):  #通过对角线分析可以知道,i>=j ,所以范围是[1,i]
            # 控制输出格式,向左对齐,如果j=1 ,宽度为2,否则宽度为3
            print('{}*{}={:<{}}'.format(j,i,j*i,2 if j == 1 else 3), end="")
        print()
    
    99乘法表.png

    打印方向99乘法表

    #方法一
    
    for i in range(1,10): # [1,9]
        for j in range(1,10):
            if j >= i: # [i,10] ,打印乘法表
                print("{}*{}={:<{}}".format(i,j,i+j,3 if j < 5 else 4), end="")
            else : #如果i > j 补空格,[1,i)
                print("{} {} {:<{}}".format(" "," "," ",3 if j < 5 else 4), end="")
        print()
            
    
    反99乘法表.png
    #方法二
    
    for i in range(1,10):#[1,9]
        s = "" # 定义一个空字符串
        for j in range(i,10): #[i,10]
            #将输出拼接为一行的字符串
            s += '{}*{}={:<{}}'.format(i,j,i+j,3 if j < 5 else 4)
            #讲整行字符串右对齐,宽度是75
        print("{:>75}".format(s))
    
    反99乘法表.png

    二.打印菱形

    #打印菱形
    #方法一
    n = 7 
    for x in range(-(n//2),n//2+1):#[-3,3]
        if x < 0:
            y = -x
        else:
            y = x
        print(y*' '+(n-2*y)*'*')
    
    菱形.png
    #打印菱形
    #方法二,坐标建模,菱形的范围就在|x|+|y|< n//2+1
    n = 7
    for x in range(n//2,-(n//2+1),-1): #[3,-3]
        print(abs(x)*' ',end='')
        for y in range(-(n//2),(n//2)+1):#[-3,3]
            if abs(x)+abs(y)<(n//2+1):
                print('*',end='')
        print()
    
    菱形.png
    #打印对顶三角形
    n = 7
    for x in range(-(n//2),n//2+1):
        y = -x if x <= 0 else x  #三元表达式
        print((n//2-y)*' '+(2*y+1)*'*')
    
    对顶三角形.png
    #打印闪电
    n = 7
    for x in range(-(n//2),n//2+1):
        if x == 0:
            print(n*'*')
        elif x < 0:
            print(-x*' '+(n//2+1+x)*'*')
        else:
            print(n//2*' '+(n//2+1-x)*'*')
    
    闪电.png

    三. 斐波那契数列

    斐波那契数列F(0) = 0 , F(1) = 1, n > 1, F(n) = F(n-1) + F(n-2)

    #打印100以内的斐波那契数列
    #第0项
    a = 0
    #第1项
    b = 1
    print(0 ,1,end=' ')
    while True:
        c = a + b
        a,b = b,c
        if c > 100:
            break
        print(c , end=' ')
    
    100以内fib数.png
    #求斐波那契数列第101项
    a = 0
    b = 1
    for i in range(2,102): #[2,101]
        c = a + b
        a,b = b,c
    print(c)
    
    fib第101项.png

    四.求10万内的所有素数

    假设a>=b
    m = a*b >= b^2
    a >= m **0.5
    b <= m **0.5
    因为如果一个数不是素数是合数, 那么一定可以由两个自然数相乘得到,合数m 一定有小于或者等于m的平方根的因数,所以只要验证素数的除数的范围只需其平方根。
    第一种方法:

    import time
    start = time.clock()
    number = 100000
    count = 1
    print(2,end=' ')
    #除了2以外,所有素数都是奇数
    for num in range(3,24,2):
        flag = True
        for i in range(2,int(num**0.5)+ 1):
            m = num % i
            if m == 0 :
                flag = False
                break
            else:
                flag = True
        if flag:
            count += 1
            print(num, end=' ')
    for num in range(25,number,2):
      ##大于6的质数除以6,余数都是1或者5
        if num % 6 != 1 and num % 6 != 5:
            continue
        else :
            flag = False
            for i in range(5,int(num**0.5 + 1),6):
                if ( not num % i ) or ( not num % (i+2) ):
                    flag = False
                    break
                else:
                    flag = True
        if flag :
            print(num, end= ' ')
            count += 1
    print()
    print(count)
    end = time.clock()
    time = end - start
    print(time)
    

    第二种方法

    import time
    start = time.clock()
    count = 2
    print(2, end=' ')
    print(3, end=' ')
    number = 100000
    for num in range(5,number,2):
      #大于6的质数除以6,余数都是1或者5
        if num % 6 != 1 and num % 6 != 5:
            continue
        else :
            flag = False
            if num < 30 :
                for i in range(3,num,2):
                    if not ( num % i ):
                        flag = False
                        break
                    else:
                        flag = True
            else:
                for i in range(5,int(num**0.5 + 1),6):
                    if ( not num % i ) or ( not num % (i+2) ):
                        flag = False
                        break
                    else:
                         flag = True
        if flag :
            print(num, end= ' ')
            count += 1
    print()
    print(count)
    end = time.clock()
    time = end - start
    print(time)
    
    #打印10万以内的素数
    #第三种方法
    n = 100000
    #除了2 以外的素数,都是奇数
    count=1
    print(2,end=' ')
    for i in range(3,n,2):
        flag = False
        if i > 10 and  i % 5 == 0 :
            continue
        for j in range(3,int(i**0.5)+1,2):
            if i % j == 0:
                break 
        else:
            print(i,end=' ')
            count += 1
    
    print()
    print(count)
    

    总共9592个,最后一项是99991

    相关文章

      网友评论

          本文标题:99乘法表,菱形,fib,素数(python)

          本文链接:https://www.haomeiwen.com/subject/cpgmvftx.html