34.Demo34 最大公约数
题目描述
输入两个正整数,计算其最大公约数,例如4和2的最大公约数是2,16和24的最大公约数是8
输入输出描述
输入两个数字
输出最大公约数
def gcd(a, b):
while b:
a, b = b, a % b
return a
num1, num2 = map(int, input().split())
result = gcd(num1, num2)
print(result)
35.Demo35 判断素数
题目描述
一个大于1的整数如果只能被正整数1和它本身整除,则它就是素数,例如2、3、5和7都是素数,而4、6、8、9则不是
输入输出描述
输入一个大于1的正整数
输出Yes表示该数字是素数,否则输出No
def is_prime(num):
if num <= 1:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True
number = int(input("请输入一个大于1的正整数: "))
if is_prime(number):
print("Yes")
else:
print("No")
36.Demo36 最小公倍数
题目描述
输入两个正整数,计算其最小公倍数,例如4和2的最小公倍数是4,3和5的最小公倍数是15
输入输出描述
输入两个正整数
输出最小公倍数
def lcm(a, b):
def gcd(x, y):
while y:
x, y = y, x % y
return x
return a * b // gcd(a, b)
num1, num2 = map(int, input().split())
result = lcm(num1, num2)
print(result)
37.Demo37 整数的素因子
题目描述
输入一个正整数,然后找出它所有的最小因子,也称之为素因子
输入输出描述
输入一个正整数
输出多行,每行输出一个素因子
def find_smallest_prime_factors(num):
factors = []
divisor = 2
while divisor * divisor <= num:
if num % divisor == 0:
factors.append(divisor)
num //= divisor
else:
divisor += 1
if num > 1:
factors.append(num)
return factors
number = int(input("请输入一个正整数: "))
result = find_smallest_prime_factors(number)
for factor in result:
print(factor)
38.Demo38 完全数
题目描述
如果一个正整数等于除了它本身之外所有正因子的和,那么这个数称为完全数
例如 6 = 3 + 2 + 1,28 = 14 + 7 + 4 + 2 + 1
输入输出描述
输入一个正整数
输出该数是否为完全数
def is_perfect_number(num):
if num <= 1:
return False
divisors_sum = 1
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
divisors_sum += i
if i != num // i:
divisors_sum += num // i
return divisors_sum == num
number = int(input("请输入一个正整数: "))
if is_perfect_number(number):
print("Yes")
else:
print("No")
39.Demo39 前50个素数
题目描述
打印前50个素数,每打印10个素数换行
def is_prime(num):
if num <= 1:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True
count = 0
num = 2
while count < 50:
if is_prime(num):
print(num, end=" ")
count += 1
if count % 10 == 0:
print()
num += 1
40.Demo40 计算π
题目描述
你可以使用下面的数列近似计算π
π=4(1-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+\frac{1}{9}-\frac{1}{11}+...+\frac{(-1)^{i+1}}{2i-1})
当i越大时,计算结果越近似于π
def approximate_pi(iterations):
pi_approx = 0
sign = 1
for i in range(1, iterations+1):
pi_approx += sign * (1 / (2*i - 1))
sign *= -1
return 4 * pi_approx
result = approximate_pi(1000000)
print(result)
41.Demo41 计算e
题目描述
你可以使用下面的数列近似计算e
e=1+\frac{1}{1!}+\frac{1}{2!}+\frac{1}{3!}+\frac{1}{4!}+...+\frac{1}{i!}
当i越大时,计算结果越近似于e
def approximate_e(n):
e_approx = 1
factorial = 1
for i in range(1, n):
factorial *= i
e_approx += 1 / factorial
return e_approx
n = 10 # Choose the number of terms to use in the approximation
approx_e = approximate_e(n)
print("Approximation of e:", approx_e)
43.Demo43 组合问题I
题目描述
在数字范围[1,7]之间,任意选择两个不相同的数作为一个组合,输出每一组组合,并统计所有组合的个数
注:组合(a,b)与组合(b,a)算同一种组合,只记录一次
count = 0
for i in range(1, 7):
for j in range(i+1, 8):
print(f"组合({i}, {j})")
count += 1
print("总共的组合个数为:", count)
44.Demo44 组合问题II
题目描述
有1、2、3、4这个四个数字,能组成多少个互不相同且无重复数字的三位数?分别又是多少?
count = 0
for i in range(1, 5):
for j in range(1, 5):
for k in range(1, 5):
if i != j and j != k and i != k:
print(f"{i}{j}{k}")
count += 1
print("总共的符合要求的三位数个数为:", count)
47.Demo47 堆叠相加
题目描述
现有堆叠相加模式$a+aa+aaa+aaaa+aaaaa+......$
例如:$2+22+222+2222+22222$,其中a为2,且有5组数字
输入输出描述
输入两个数据分别为数字a和组数n
输出按照堆叠相加模式算出的和
def stack_addition(a, n):
result = 0
current_term = a
for _ in range(n):
result += current_term
current_term = current_term * 10 + a
return result
a = 2
n = 5
total = stack_addition(a, n)
print("堆叠相加结果:", total)
48.Demo48 十进制转二进制
题目描述
输入一个十进制正整数,输出其二进制形式
输入输出描述
输入一个十进制正整数
输出二进制字符串
decimal_number = int(input("请输入一个十进制正整数:"))
binary_number = bin(decimal_number)[2:]
print(binary_number)
52.Demo52 最长公共前缀
题目描述
给定两个字符串 s1 和 s2 ,求两个字符串最长的公共前缀串,字符区分大小写
输入输出描述
输入两行,分别表示s1和s2
输出前缀串、
s1 = input("请输入字符串 s1:")
s2 = input("请输入字符串 s2:")
common_prefix = ""
for i in range(min(len(s1), len(s2))):
if s1[i] == s2[i]:
common_prefix += s1[i]
else:
break
print(common_prefix)
53.Demo53 子串出现的次数
题目描述
给定两个字符串 s1 和 s2 ,求 s2 在 s1 中出现的次数,字符区分大小写,已匹配的字符不计入下一次匹配
输入输出描述
输入两行字符串,分别为s1和s2,s2的长度小于等于s1
输出s2在s1中出现的次数
s1 = input("请输入字符串 s1:")
s2 = input("请输入字符串 s2:")
count = 0
start = 0
while True:
index = s1.find(s2, start)
if index == -1:
break
count += 1
start = index + 1
print(count)
54.Demo54 最长公共子串
题目描述
给定两个字符串 s1 和 s2 ,求 s1 与 s2 之间的最长公共子串,字符区分大小写
输入输出描述
输入两行字符串,分别为s1和s2
输出最长公共子串
s1 = input("请输入字符串 s1:")
s2 = input("请输入字符串 s2:")
def longest_common_substring(s1, s2):
m = len(s1)
n = len(s2)
dp = [[0] * (n + 1) for _ in range(m + 1)]
max_length = 0
end_index = 0
for i in range(1, m + 1):
for j in range(1, n + 1):
if s1[i - 1] == s2[j - 1]:
dp[i][j] = dp[i - 1][j - 1] + 1
if dp[i][j] > max_length:
max_length = dp[i][j]
end_index = i
else:
dp[i][j] = 0
return s1[end_index - max_length:end_index]
print(longest_common_substring(s1, s2))
55.Demo55 检测密码
题目描述
一些网站会给密码强加一些规则:
(1)密码必须至少有8个字符
(2)密码只能包含英文字母和数字
(3)密码应该至少包含两个数字
(4)密码应该至少包含两个大写字母
如果密码符合规则,输出Yes;否则输出No
输入输出描述
输入一串密码
输出该密码是否符合规则
import re
password = input("请输入密码:")
if (len(password) >= 8 and
re.match("^(?=.*[A-Z].*[A-Z])(?=.*[0-9].*[0-9])([A-Za-z0-9]+)$", password)):
print("Yes")
else:
print("No")
56.Demo56 回文素数
题目描述
回文素数是指一个数既是素数又是回文数,例如131既是素数也是回文数
输出显示前100个回文素数,每行显示10个
def is_prime(num):
if num < 2:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True
def is_palindrome(num):
return str(num) == str(num)[::-1]
count = 0
num = 2
while count < 100:
if is_prime(num) and is_palindrome(num):
print(num, end=" ")
count += 1
if count % 10 == 0:
print()
num += 1
57.Demo57 反素数
题目描述
反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如17和71都是素数但不是回文数,且反转后依旧是素数
输出显示前100个反素数,每行显示10个
def is_prime(num):
if num < 2:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True
def is_reverse_prime(num):
reverse_num = int(str(num)[::-1])
return is_prime(num) and is_prime(reverse_num) and num != reverse_num
count = 0
num = 2
while count < 100:
if is_reverse_prime(num):
print(num, end=" ")
count += 1
if count % 10 == 0:
print()
num += 1
58.Demo58 双素数
题目描述
双素数是指一对差值为2的素数,例如3和5就是一对双素数,5和7也是一对双素数
输出显示小于1000的双素数
def is_prime(num):
if num < 2:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True
for num in range(3, 1000):
if is_prime(num) and is_prime(num + 2):
print(f"{num}和{num+2}是一对双素数")
59.Demo59 梅森素数
如果一个素数可以写成$2^p-1$的形式,其中p是某个正整数,那么这个素数就称作梅森素数
输出p≤31的所有梅森素数
def is_prime(num):
if num < 2:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True
for p in range(1, 32):
candidate = 2**p - 1
if is_prime(candidate):
print(f"p={p}时,梅森素数为:{candidate}")
60.Demo60 平方根的近似求法
有几种实现开平方$\sqrt{n}$的技术,其中一个称为巴比伦法
它通过使用下面公式的反复计算近似地得到:
当nextGuess和lastGuess几乎相同时,nextGuess就是平方根的近似值
lastGuess初始值为1,如果nextGuess和lastGuess的差值小于一个很小的数,比如0.0001,就可以认为nextGuess是n的平方根的近似值;否则,nextGuess成为下一次计算的lastGuess,近似过程继续执行
编写代码,求解n的平方根的近似值
def sqrt_by_babylonian_method(n):
last_guess = 1
next_guess = (last_guess + n / last_guess) / 2
while abs(next_guess - last_guess) >= 0.0001:
last_guess = next_guess
next_guess = (last_guess + n / last_guess) / 2
return next_guess
n = float(input("请输入一个数:"))
result = sqrt_by_babylonian_method(n)
print(f"巴比伦法求得的{n}的平方根近似值为:{result:.4f}")