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