1. 程式人生 > 其它 >python-4 質數

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)]