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

2018-08-04  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读