python-4 質數
阿新 • • 發佈:2022-04-22
質數又稱素數。一個大於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)]