python-4 质数
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。
import datetime
n = 100000
count =1
ops=0
start = datetime.datetime.now()
for x in range(3, n, 2):
if x > 10 and x % 5 == 0 :
ops += 1
continue
for i in range(3, int(x** 0.5) + 1, 2 ):
ops += 1
if x % i == 0 :
break
else:
count += 1
delta = (datetime.datetime.now() - start).total_seconds()
print(count)
print(delta)
print(ops)
#####
9592
0.288266
1338776
#####
import datetime
n = 100000
count =1
ops=0
primenums = [2] #空间换时间
start = datetime.datetime.now()
for x in range(3, n, 2):
flag = False
edge = int(x**0.5)
ops += 1
for i in primenums:
if i > edge:
flag = True
break
ops += 1
if x % i == 0 :
break
if flag:
primenums.append(x)
delta = (datetime.datetime.now() - start).total_seconds()
print(len(primenums))
print(delta)
print(ops)
######
9592
0.200499
744436
######
孪生素数就是指相差2的素数对,例如3和5,5和7,11和13…。孪生素数猜想正式由希尔伯特在1900年国际数学家大会的报告上第8个问题中提出,可以这样描述:
存在无穷多个素数p,使得p + 2是素数。
素数对(p, p + 2)称为孪生素数。
6(x)+-1=(p P) 6乘以完全不等数加减1是一对孪生素数。
import datetime
n = 100000
x = 7 # 2 3 5
step = 4
count = 3
start = datetime.datetime.now()
while x < n : # 控制测试的数字
# 如果从7开始,那么后面所有数字x的个位是5的话,直接跳过
for j in range(3, int(x**0.5) + 1, 2): # 所有奇数? #质数列表
if x % j == 0 :
break
else:
count += 1
x += step
step = 2 if step == 4 else 4
delta = (datetime.datetime.now() - start).total_seconds()
print(count)
print(delta)
######
9592
0.179518
######
杨辉三角
n = 6
triangle = [[1], [1,1]]
for i in range(2, n):
row = [1]
triangle.append(row)
pre = triangle[i-1]
for j in range(1, i):
row.append(pre[j-1] + pre[j])
row.append(1)
#triangle.append(row)
print(triangle)
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]
# 补零法
n = 6
newline = [1]
print(newline)
for i in range(1, n): # 1, 2, 3, 4, 5
oldline = newline[:] + [0]
newline = []
for j in range(i+1): # 2, 3, 4, 5, 6
newline.append(oldline[j-1] + oldline[j])
print(newline)
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
用户输入一个十进制正整数数字
1 判断是几位数
2 打印每一位数字及其重复的次数
3 依次打印每一位数字,顺序个 十 百 千 万位
num = ''
while True:
num = input('Input a positive number >>> ').strip().lstrip('0')
if num.isdigit():
break
print("The length of {} is {}".format(num, len(num)))
# num = '12345'
length = len(num)
for i in range(length):
print(num[-1-i], end=' ')
print()
for i in range(-1, -length-1, -1):
print(num[i], end=' ')
print()
print(num[::-1]) #重新生成一个,占一倍内存
for i in range(1, length+1):
print(num[-i], end=' ')
print()
for i in reversed(num):
print(i, end=' ')
print()
# 统计数字出现的次数
counter = [0] * 10
for x in num:
y = int(x)
if counter[y] == 0 :
c = num.count(x)
print(x, c)
counter[y] = c
#统计数字出现的次数
counter = [0] * 10
for x in num:
y = int(x)
counter[y] += 1
print(counter)
输入五个十进制正整数,输出位数并排序
nums = []
while True:
num = input('Input a positive number >>> ').strip().lstrip('0')
if num.isdigit():
length = len(num)
print("The length of {} is {}".format(num, length))
nums.append(int(num))
length = len(nums)
if length >= 5 :
break
lst = nums.copy()
lst.sort()
print(lst)
# nums.sort()
# sorted(nums)
# 冒泡法
peach = 1
for i in range(9):
peach = (peach + 1) * 2
print(peach)
# 1534
import random
nums = []
for i in range(10):
nums.append(random.randint(1, 20))
print(nums)
length = len(nums)
states = [0] * length
samenums = []
diffnums = []
for i in range(length):
if states[i] != 0:
continue
flag = False
count = 1
for j in range(i+1, length):
if states[j] != 0:
continue
if nums[i] == nums[j]:
flag = True
count += 1
states[j] = 1
if flag:
samenums.append((nums[i], count))
else:
diffnums.append((nums[i],count))
print(samenums)
print(diffnums)
###########
[16, 5, 11, 17, 15, 17, 8, 15, 9, 5]
[(5, 2), (17, 2), (15, 2)]
[(16, 1), (11, 1), (8, 1), (9, 1)]