python-4 质数

质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。

enter description here

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是一对孪生素数。

enter description here

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

enter description here

# 补零法
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]

enter description here

用户输入一个十进制正整数数字
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)
# 冒泡法

enter description here

peach = 1 
for i in range(9):
    peach = (peach + 1) * 2
print(peach)   
# 1534

enter description here

enter description here

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)]
posted @ 2022-04-22 09:52  何时&明月  阅读(131)  评论(0)    收藏  举报