mlymath 0.3.0b1__tar.gz → 0.4.0b2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mlymath-0.3.0b1 → mlymath-0.4.0b2}/PKG-INFO +21 -8
- {mlymath-0.3.0b1 → mlymath-0.4.0b2}/README.md +20 -7
- mlymath-0.4.0b2/RSA/RSA.py +74 -0
- mlymath-0.4.0b2/RSA/__init__.py +13 -0
- mlymath-0.4.0b2/_random/__init__.py +23 -0
- mlymath-0.4.0b2/_random/_random.py +91 -0
- mlymath-0.4.0b2/hsah/__init__.py +13 -0
- mlymath-0.4.0b2/hsah/hash.py +37 -0
- {mlymath-0.3.0b1 → mlymath-0.4.0b2}/math/__init__.py +0 -12
- {mlymath-0.3.0b1 → mlymath-0.4.0b2}/math/math.py +1 -97
- {mlymath-0.3.0b1 → mlymath-0.4.0b2}/mlymath.egg-info/PKG-INFO +21 -8
- {mlymath-0.3.0b1 → mlymath-0.4.0b2}/mlymath.egg-info/SOURCES.txt +6 -0
- {mlymath-0.3.0b1 → mlymath-0.4.0b2}/mlymath.egg-info/top_level.txt +3 -0
- {mlymath-0.3.0b1 → mlymath-0.4.0b2}/mod/mod.py +9 -8
- {mlymath-0.3.0b1 → mlymath-0.4.0b2}/setup.py +2 -2
- {mlymath-0.3.0b1 → mlymath-0.4.0b2}/mlymath.egg-info/dependency_links.txt +0 -0
- {mlymath-0.3.0b1 → mlymath-0.4.0b2}/mod/__init__.py +0 -0
- {mlymath-0.3.0b1 → mlymath-0.4.0b2}/morse/__init__.py +0 -0
- {mlymath-0.3.0b1 → mlymath-0.4.0b2}/morse/morse.py +0 -0
- {mlymath-0.3.0b1 → mlymath-0.4.0b2}/puzzle/__init__.py +0 -0
- {mlymath-0.3.0b1 → mlymath-0.4.0b2}/puzzle/puzzle.py +0 -0
- {mlymath-0.3.0b1 → mlymath-0.4.0b2}/setup.cfg +0 -0
- {mlymath-0.3.0b1 → mlymath-0.4.0b2}/sort/__init__.py +0 -0
- {mlymath-0.3.0b1 → mlymath-0.4.0b2}/sort/sort.py +0 -0
@@ -1,12 +1,12 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: mlymath
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.4.0b2
|
4
4
|
Summary: 一个用于数学计算的Python库
|
5
5
|
Author: mly
|
6
6
|
Classifier: Programming Language :: Python :: 3
|
7
7
|
Classifier: License :: OSI Approved :: MIT License
|
8
8
|
Classifier: Operating System :: OS Independent
|
9
|
-
Requires-Python: >=3.
|
9
|
+
Requires-Python: >=3.12
|
10
10
|
Description-Content-Type: text/markdown
|
11
11
|
Dynamic: author
|
12
12
|
Dynamic: classifier
|
@@ -23,9 +23,7 @@ Dynamic: summary
|
|
23
23
|
- is_prime(n) -> bool: 判断一个整数是否为素数
|
24
24
|
- comb(n: int, k: int) -> int: 计算组合数 C(n, k)
|
25
25
|
- pow(x, y): 快速计算 x 的 y 次幂
|
26
|
-
|
27
|
-
- sha3_256(input_string: str) -> str: 使用 SHA3-256 算法加密字符串
|
28
|
-
- sha3_512(input_string: str) -> str: 使用 SHA3-512 算法加密字符串
|
26
|
+
|
29
27
|
- fib_list(n) -> list: 生成包含前 N 项的斐波那契数列
|
30
28
|
- fib(n) -> int: 返回第 N 项的斐波那契数
|
31
29
|
- pell_list(n) -> list: 生成包含前 N 项的佩尔数列
|
@@ -46,10 +44,16 @@ Dynamic: summary
|
|
46
44
|
- min(\*nums, n): 找到多个数中第 N 小的数, 输入n时请注意使用n = [num]
|
47
45
|
- list_min_index(nums, n): 找到数组中第 N 小的数的索引
|
48
46
|
- min_index(\*nums, n): 找到多个数中第 N 小的数的索引, 输入n时请注意使用n = [num]
|
47
|
+
- math_help() -> None: 显示math帮助信息
|
48
|
+
- mlymath.RSA RSA
|
49
49
|
- get_rsa_keys(p: int, q: int) -> Tuple[Tuple[int, int], Tuple[int, int]]: 生成 RSA 公钥和私钥
|
50
50
|
- rsa_encrypt(public_key: Tuple[int, int], plaintext: int) -> int: 使用 RSA 公钥加密数据
|
51
51
|
- rsa_decrypt(private_key: Tuple[int, int], ciphertext: int) -> int: 使用 RSA 私钥解密数据
|
52
|
-
-
|
52
|
+
- RSA_help(): 显示帮助信息
|
53
|
+
- mlymath.hash 哈希模块
|
54
|
+
- sha256(input_string: str) -> str: 使用 SHA-256 算法加密字符串
|
55
|
+
- sha3_256(input_string: str) -> str: 使用 SHA3-256 算法加密字符串
|
56
|
+
- sha3_512(input_string: str) -> str: 使用 SHA3-512 算法加密字符串
|
53
57
|
- mlymath.sort 排序模块
|
54
58
|
- quick_sort: 使用快速排序算法对数组进行排序。可通过 reverse 参数控制排序顺序(默认正序)
|
55
59
|
- shell_sort: 使用希尔排序算法对数组进行排序。可通过 reverse 参数控制排序顺序(默认正序)
|
@@ -83,8 +87,17 @@ Dynamic: summary
|
|
83
87
|
- mod7(n): 判断 n 是否能被 7 整除。
|
84
88
|
- mod8(n): 判断 n 是否能被 8 整除。
|
85
89
|
- mod9(n): 判断 n 是否能被 9 整除。
|
90
|
+
- mlymath.random 随机数模块
|
91
|
+
- randint(a, b): 返回[a,b]之间的随机整数
|
92
|
+
- randfloat(a, b): 返回[a,b]之间的随机浮点数
|
93
|
+
- randlst(a, b, n): 返回[a,b]之间的n个随机整数
|
94
|
+
- randls_float(a, b, n): 返回[a,b]之间的n个随机浮点数
|
95
|
+
- randint_notsame(a, b): 返回[a,b]之间的不重复随机整数
|
96
|
+
- randfloat_notsame(a, b): 返回[a,b]之间的不重复随机浮点数
|
97
|
+
- randlst_notsame(a, b, n): 返回[a,b]之间的n个不重复随机整数
|
98
|
+
- randls_float_notsame(a, b, n): 返回[a,b]之间的n个不重复随机浮点数
|
99
|
+
- random_help(): 显示随机数模块的帮助信息
|
100
|
+
|
86
101
|
#### mly万岁!!!🎉
|
87
102
|
#### mly万岁!!!🎉
|
88
103
|
#### mly万岁!!!🎉
|
89
|
-
|
90
|
-
|
@@ -6,9 +6,7 @@
|
|
6
6
|
- is_prime(n) -> bool: 判断一个整数是否为素数
|
7
7
|
- comb(n: int, k: int) -> int: 计算组合数 C(n, k)
|
8
8
|
- pow(x, y): 快速计算 x 的 y 次幂
|
9
|
-
|
10
|
-
- sha3_256(input_string: str) -> str: 使用 SHA3-256 算法加密字符串
|
11
|
-
- sha3_512(input_string: str) -> str: 使用 SHA3-512 算法加密字符串
|
9
|
+
|
12
10
|
- fib_list(n) -> list: 生成包含前 N 项的斐波那契数列
|
13
11
|
- fib(n) -> int: 返回第 N 项的斐波那契数
|
14
12
|
- pell_list(n) -> list: 生成包含前 N 项的佩尔数列
|
@@ -29,10 +27,16 @@
|
|
29
27
|
- min(\*nums, n): 找到多个数中第 N 小的数, 输入n时请注意使用n = [num]
|
30
28
|
- list_min_index(nums, n): 找到数组中第 N 小的数的索引
|
31
29
|
- min_index(\*nums, n): 找到多个数中第 N 小的数的索引, 输入n时请注意使用n = [num]
|
30
|
+
- math_help() -> None: 显示math帮助信息
|
31
|
+
- mlymath.RSA RSA
|
32
32
|
- get_rsa_keys(p: int, q: int) -> Tuple[Tuple[int, int], Tuple[int, int]]: 生成 RSA 公钥和私钥
|
33
33
|
- rsa_encrypt(public_key: Tuple[int, int], plaintext: int) -> int: 使用 RSA 公钥加密数据
|
34
34
|
- rsa_decrypt(private_key: Tuple[int, int], ciphertext: int) -> int: 使用 RSA 私钥解密数据
|
35
|
-
-
|
35
|
+
- RSA_help(): 显示帮助信息
|
36
|
+
- mlymath.hash 哈希模块
|
37
|
+
- sha256(input_string: str) -> str: 使用 SHA-256 算法加密字符串
|
38
|
+
- sha3_256(input_string: str) -> str: 使用 SHA3-256 算法加密字符串
|
39
|
+
- sha3_512(input_string: str) -> str: 使用 SHA3-512 算法加密字符串
|
36
40
|
- mlymath.sort 排序模块
|
37
41
|
- quick_sort: 使用快速排序算法对数组进行排序。可通过 reverse 参数控制排序顺序(默认正序)
|
38
42
|
- shell_sort: 使用希尔排序算法对数组进行排序。可通过 reverse 参数控制排序顺序(默认正序)
|
@@ -66,8 +70,17 @@
|
|
66
70
|
- mod7(n): 判断 n 是否能被 7 整除。
|
67
71
|
- mod8(n): 判断 n 是否能被 8 整除。
|
68
72
|
- mod9(n): 判断 n 是否能被 9 整除。
|
73
|
+
- mlymath.random 随机数模块
|
74
|
+
- randint(a, b): 返回[a,b]之间的随机整数
|
75
|
+
- randfloat(a, b): 返回[a,b]之间的随机浮点数
|
76
|
+
- randlst(a, b, n): 返回[a,b]之间的n个随机整数
|
77
|
+
- randls_float(a, b, n): 返回[a,b]之间的n个随机浮点数
|
78
|
+
- randint_notsame(a, b): 返回[a,b]之间的不重复随机整数
|
79
|
+
- randfloat_notsame(a, b): 返回[a,b]之间的不重复随机浮点数
|
80
|
+
- randlst_notsame(a, b, n): 返回[a,b]之间的n个不重复随机整数
|
81
|
+
- randls_float_notsame(a, b, n): 返回[a,b]之间的n个不重复随机浮点数
|
82
|
+
- random_help(): 显示随机数模块的帮助信息
|
83
|
+
|
69
84
|
#### mly万岁!!!🎉
|
70
85
|
#### mly万岁!!!🎉
|
71
|
-
#### mly万岁!!!🎉
|
72
|
-
|
73
|
-
|
86
|
+
#### mly万岁!!!🎉
|
@@ -0,0 +1,74 @@
|
|
1
|
+
import hashlib
|
2
|
+
import random
|
3
|
+
from typing import Tuple
|
4
|
+
|
5
|
+
def get_rsa_key(p: int, q: int) -> Tuple[Tuple[int, int], Tuple[int, int]]:
|
6
|
+
"""
|
7
|
+
生成 RSA 公钥和私钥。
|
8
|
+
:param p: 第一个大素数
|
9
|
+
:param q: 第二个大素数
|
10
|
+
:return: 公钥 (e, n) 和私钥 (d, n)
|
11
|
+
"""
|
12
|
+
n = p * q
|
13
|
+
phi = (p - 1) * (q - 1)
|
14
|
+
|
15
|
+
def multiplicative_inverse(e: int, phi: int) -> int:
|
16
|
+
d = 0
|
17
|
+
x1 = 0
|
18
|
+
x2 = 1
|
19
|
+
y1 = 1
|
20
|
+
temp_phi = phi
|
21
|
+
|
22
|
+
while e > 0:
|
23
|
+
temp1 = temp_phi // e
|
24
|
+
temp2 = temp_phi - temp1 * e
|
25
|
+
temp_phi = e
|
26
|
+
e = temp2
|
27
|
+
|
28
|
+
x = x2 - temp1 * x1
|
29
|
+
y = d - temp1 * y1
|
30
|
+
|
31
|
+
x2 = x1
|
32
|
+
x1 = x
|
33
|
+
d = y1
|
34
|
+
y1 = y
|
35
|
+
|
36
|
+
if temp_phi == 1:
|
37
|
+
return d + phi
|
38
|
+
|
39
|
+
e = random.randint(1, phi)
|
40
|
+
from mlymath.math import gcd
|
41
|
+
while gcd(e, phi) != 1: # 直接调用模块级 gcd 函数
|
42
|
+
e = random.randint(1, phi)
|
43
|
+
|
44
|
+
d = multiplicative_inverse(e, phi)
|
45
|
+
return (e, n), (d, n)
|
46
|
+
|
47
|
+
def rsa_encrypt(public_key: Tuple[int, int], plaintext: int) -> int:
|
48
|
+
"""
|
49
|
+
使用 RSA 公钥加密数据。
|
50
|
+
:param public_key: 公钥 (e, n)
|
51
|
+
:param plaintext: 明文数据
|
52
|
+
:return: 密文数据
|
53
|
+
"""
|
54
|
+
e, n = public_key
|
55
|
+
return pow(plaintext, e, n)
|
56
|
+
|
57
|
+
def rsa_decrypt(private_key: Tuple[int, int], ciphertext: int) -> int:
|
58
|
+
"""
|
59
|
+
使用 RSA 私钥解密数据。
|
60
|
+
:param private_key: 私钥 (d, n)
|
61
|
+
:param ciphertext: 密文数据
|
62
|
+
:return: 明文数据
|
63
|
+
"""
|
64
|
+
d, n = private_key
|
65
|
+
return pow(ciphertext, d, n)
|
66
|
+
|
67
|
+
def RSA_help():
|
68
|
+
"""提供模块帮助信息"""
|
69
|
+
print("以下是可用的函数:")
|
70
|
+
print("- get_rsa_keys(p: int, q: int) -> Tuple[Tuple[int, int], Tuple[int, int]]: 生成 RSA 公钥和私钥")
|
71
|
+
print("- rsa_encrypt(public_key: Tuple[int, int], plaintext: int) -> int: 使用 RSA 公钥加密数据")
|
72
|
+
print("- rsa_decrypt(private_key: Tuple[int, int], ciphertext: int) -> int: 使用 RSA 私钥解密数据")
|
73
|
+
print("- RSA_help() -> None: 显示帮助信息")
|
74
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
from ._random import (
|
2
|
+
randint,
|
3
|
+
randfloat,
|
4
|
+
randlst,
|
5
|
+
randls_float,
|
6
|
+
randint_notsame,
|
7
|
+
randfloat_notsame,
|
8
|
+
randlst_notsame,
|
9
|
+
randls_float_notsame,
|
10
|
+
random_help
|
11
|
+
)
|
12
|
+
|
13
|
+
__all__ = [
|
14
|
+
"randint",
|
15
|
+
"randfloat",
|
16
|
+
"randlst",
|
17
|
+
"randls_float",
|
18
|
+
"randint_notsame",
|
19
|
+
"randfloat_notsame",
|
20
|
+
"randlst_notsame",
|
21
|
+
"randls_float_notsame",
|
22
|
+
"random_help"
|
23
|
+
]
|
@@ -0,0 +1,91 @@
|
|
1
|
+
from random import randint, uniform, sample, shuffle, getrandbits
|
2
|
+
|
3
|
+
def randint(a, b):
|
4
|
+
"""
|
5
|
+
返回[a,b]之间的随机整数
|
6
|
+
a <= return <= b
|
7
|
+
"""
|
8
|
+
return randint(a, b) # 使用标准库实现
|
9
|
+
|
10
|
+
def randfloat(a, b):
|
11
|
+
"""
|
12
|
+
返回[a,b]之间的随机浮点数
|
13
|
+
a <= return <= b
|
14
|
+
"""
|
15
|
+
# 使用标准random生成浮点数
|
16
|
+
return a + (b - a) * (getrandbits(32) / (2**32 - 1)) # 替换randbits方法
|
17
|
+
|
18
|
+
def randlst(a, b, n):
|
19
|
+
"""
|
20
|
+
返回[a,b]之间的n个随机整数
|
21
|
+
"""
|
22
|
+
return [randint(a, b) for _ in range(n)] # 使用标准randint
|
23
|
+
|
24
|
+
def randls_float(a, b, n):
|
25
|
+
"""
|
26
|
+
返回[a,b]之间的n个随机浮点数
|
27
|
+
"""
|
28
|
+
step = (b - a) / 1000
|
29
|
+
float_values = [a + i * step for i in range(1000)]
|
30
|
+
# 使用标准shuffle
|
31
|
+
shuffle(float_values) # 替换SystemRandom().shuffle
|
32
|
+
return float_values[:n]
|
33
|
+
|
34
|
+
def randint_notsame(a, b):
|
35
|
+
"""
|
36
|
+
返回[a,b]之间的不重复随机整数
|
37
|
+
a <= return <= b
|
38
|
+
"""
|
39
|
+
try:
|
40
|
+
return randint(a, b) # 替换randbelow为randint
|
41
|
+
except Exception as e:
|
42
|
+
return f"Error: {str(e)}"
|
43
|
+
|
44
|
+
def randfloat_notsame(a, b):
|
45
|
+
"""
|
46
|
+
返回[a,b]之间的不重复随机浮点数
|
47
|
+
a <= return <= b
|
48
|
+
"""
|
49
|
+
try:
|
50
|
+
# 替换_secrets相关实现
|
51
|
+
return uniform(a, b) # 直接使用标准库uniform
|
52
|
+
except ValueError:
|
53
|
+
return "Error: Insufficient elements to generate unique random float."
|
54
|
+
|
55
|
+
def randlst_notsame(a, b, n):
|
56
|
+
"""
|
57
|
+
返回[a,b]之间的n个不重复随机整数
|
58
|
+
"""
|
59
|
+
try:
|
60
|
+
population = list(range(a, b + 1))
|
61
|
+
# 使用标准sample方法
|
62
|
+
return sample(population, min(n, len(population))) # 替换pop+randbelow逻辑
|
63
|
+
except Exception as e:
|
64
|
+
return f"Error: {str(e)}"
|
65
|
+
|
66
|
+
def randls_float_notsame(a, b, n):
|
67
|
+
"""
|
68
|
+
返回[a,b]之间的n个不重复随机浮点数
|
69
|
+
"""
|
70
|
+
# 简化实现
|
71
|
+
if n > 1000:
|
72
|
+
return f"Error: Cannot generate more than 1000 unique floats between {a} and {b}"
|
73
|
+
|
74
|
+
# 使用标准库生成并打乱
|
75
|
+
step = (b - a) / 1000
|
76
|
+
float_values = [a + i * step for i in range(1000)]
|
77
|
+
shuffle(float_values) # 替换_secrets shuffle
|
78
|
+
return float_values[:n]
|
79
|
+
|
80
|
+
def random_help():
|
81
|
+
"""提供模块帮助信息"""
|
82
|
+
print("以下是可用的函数:")
|
83
|
+
print("- randint(a, b): 返回[a,b]之间的随机整数")
|
84
|
+
print("- randfloat(a, b): 返回[a,b]之间的随机浮点数")
|
85
|
+
print("- randlst(a, b, n): 返回[a,b]之间的n个随机整数")
|
86
|
+
print("- randls_float(a, b, n): 返回[a,b]之间的n个随机浮点数")
|
87
|
+
print("- randint_notsame(a, b): 返回[a,b]之间的不重复随机整数")
|
88
|
+
print("- randfloat_notsame(a, b): 返回[a,b]之间的不重复随机浮点数")
|
89
|
+
print("- randlst_notsame(a, b, n): 返回[a,b]之间的n个不重复随机整数")
|
90
|
+
print("- randls_float_notsame(a, b, n): 返回[a,b]之间的n个不重复随机浮点数")
|
91
|
+
print("- random_help(): 显示帮助信息")
|
@@ -0,0 +1,37 @@
|
|
1
|
+
import hashlib
|
2
|
+
|
3
|
+
def sha3_256(input_string: str) -> str:
|
4
|
+
"""
|
5
|
+
使用 SHA3-256 算法加密字符串。
|
6
|
+
:param input_string: 待加密的字符串
|
7
|
+
:return: 加密后的十六进制字符串
|
8
|
+
"""
|
9
|
+
sha3_256_hash = hashlib.sha3_256(input_string.encode()).hexdigest()
|
10
|
+
return sha3_256_hash
|
11
|
+
|
12
|
+
def sha3_512(input_string: str) -> str:
|
13
|
+
"""
|
14
|
+
使用 SHA3-512 算法加密字符串。
|
15
|
+
:param input_string: 待加密的字符串
|
16
|
+
:return: 加密后的十六进制字符串
|
17
|
+
"""
|
18
|
+
sha3_512_hash = hashlib.sha3_512(input_string.encode()).hexdigest()
|
19
|
+
return sha3_512_hash
|
20
|
+
|
21
|
+
|
22
|
+
def sha256(input_string: str) -> str:
|
23
|
+
"""
|
24
|
+
使用 SHA-256 算法加密字符串。
|
25
|
+
:param input_string: 待加密的字符串
|
26
|
+
:return: 加密后的十六进制字符串
|
27
|
+
"""
|
28
|
+
sha256_hash = hashlib.sha256(input_string.encode()).hexdigest()
|
29
|
+
return sha256_hash
|
30
|
+
|
31
|
+
def hash_help():
|
32
|
+
"""提供模块帮助信息"""
|
33
|
+
print("以下是可用的函数:")
|
34
|
+
print("- sha256(input_string: str) -> str: 使用 SHA-256 算法加密字符串")
|
35
|
+
print("- sha3_256(input_string: str) -> str: 使用 SHA3-256 算法加密字符串")
|
36
|
+
print("- sha3_512(input_string: str) -> str: 使用 SHA3-512 算法加密字符串")
|
37
|
+
print("- hash_help(): 提供模块帮助信息")
|
@@ -1,7 +1,4 @@
|
|
1
1
|
from .math import (
|
2
|
-
sha3_256,
|
3
|
-
sha3_512,
|
4
|
-
sha256,
|
5
2
|
gcd,
|
6
3
|
lcm,
|
7
4
|
is_prime,
|
@@ -27,16 +24,10 @@ from .math import (
|
|
27
24
|
max_index,
|
28
25
|
list_min_index,
|
29
26
|
min_index,
|
30
|
-
get_rsa_key,
|
31
|
-
rsa_encrypt,
|
32
|
-
rsa_decrypt,
|
33
27
|
math_help
|
34
28
|
)
|
35
29
|
|
36
30
|
__all__ = [
|
37
|
-
'sha3_256',
|
38
|
-
'sha3_512',
|
39
|
-
'sha256',
|
40
31
|
'gcd',
|
41
32
|
'lcm',
|
42
33
|
'is_prime',
|
@@ -62,8 +53,5 @@ __all__ = [
|
|
62
53
|
'max_index',
|
63
54
|
'list_min_index',
|
64
55
|
'min_index',
|
65
|
-
'get_rsa_key',
|
66
|
-
'rsa_encrypt',
|
67
|
-
'rsa_decrypt',
|
68
56
|
'math_help'
|
69
57
|
]
|
@@ -1,97 +1,5 @@
|
|
1
|
-
import hashlib
|
2
|
-
import random
|
3
1
|
from typing import Tuple
|
4
2
|
|
5
|
-
def get_rsa_key(p: int, q: int) -> Tuple[Tuple[int, int], Tuple[int, int]]:
|
6
|
-
"""
|
7
|
-
生成 RSA 公钥和私钥。
|
8
|
-
:param p: 第一个大素数
|
9
|
-
:param q: 第二个大素数
|
10
|
-
:return: 公钥 (e, n) 和私钥 (d, n)
|
11
|
-
"""
|
12
|
-
n = p * q
|
13
|
-
phi = (p - 1) * (q - 1)
|
14
|
-
|
15
|
-
def multiplicative_inverse(e: int, phi: int) -> int:
|
16
|
-
d = 0
|
17
|
-
x1 = 0
|
18
|
-
x2 = 1
|
19
|
-
y1 = 1
|
20
|
-
temp_phi = phi
|
21
|
-
|
22
|
-
while e > 0:
|
23
|
-
temp1 = temp_phi // e
|
24
|
-
temp2 = temp_phi - temp1 * e
|
25
|
-
temp_phi = e
|
26
|
-
e = temp2
|
27
|
-
|
28
|
-
x = x2 - temp1 * x1
|
29
|
-
y = d - temp1 * y1
|
30
|
-
|
31
|
-
x2 = x1
|
32
|
-
x1 = x
|
33
|
-
d = y1
|
34
|
-
y1 = y
|
35
|
-
|
36
|
-
if temp_phi == 1:
|
37
|
-
return d + phi
|
38
|
-
|
39
|
-
e = random.randint(1, phi)
|
40
|
-
while gcd(e, phi) != 1: # 直接调用模块级 gcd 函数
|
41
|
-
e = random.randint(1, phi)
|
42
|
-
|
43
|
-
d = multiplicative_inverse(e, phi)
|
44
|
-
return (e, n), (d, n)
|
45
|
-
|
46
|
-
def rsa_encrypt(public_key: Tuple[int, int], plaintext: int) -> int:
|
47
|
-
"""
|
48
|
-
使用 RSA 公钥加密数据。
|
49
|
-
:param public_key: 公钥 (e, n)
|
50
|
-
:param plaintext: 明文数据
|
51
|
-
:return: 密文数据
|
52
|
-
"""
|
53
|
-
e, n = public_key
|
54
|
-
return pow(plaintext, e, n)
|
55
|
-
|
56
|
-
def rsa_decrypt(private_key: Tuple[int, int], ciphertext: int) -> int:
|
57
|
-
"""
|
58
|
-
使用 RSA 私钥解密数据。
|
59
|
-
:param private_key: 私钥 (d, n)
|
60
|
-
:param ciphertext: 密文数据
|
61
|
-
:return: 明文数据
|
62
|
-
"""
|
63
|
-
d, n = private_key
|
64
|
-
return pow(ciphertext, d, n)
|
65
|
-
|
66
|
-
def sha3_256(input_string: str) -> str:
|
67
|
-
"""
|
68
|
-
使用 SHA3-256 算法加密字符串。
|
69
|
-
:param input_string: 待加密的字符串
|
70
|
-
:return: 加密后的十六进制字符串
|
71
|
-
"""
|
72
|
-
sha3_256_hash = hashlib.sha3_256(input_string.encode()).hexdigest()
|
73
|
-
return sha3_256_hash
|
74
|
-
|
75
|
-
def sha3_512(input_string: str) -> str:
|
76
|
-
"""
|
77
|
-
使用 SHA3-512 算法加密字符串。
|
78
|
-
:param input_string: 待加密的字符串
|
79
|
-
:return: 加密后的十六进制字符串
|
80
|
-
"""
|
81
|
-
sha3_512_hash = hashlib.sha3_512(input_string.encode()).hexdigest()
|
82
|
-
return sha3_512_hash
|
83
|
-
|
84
|
-
|
85
|
-
def sha256(input_string: str) -> str:
|
86
|
-
"""
|
87
|
-
使用 SHA-256 算法加密字符串。
|
88
|
-
:param input_string: 待加密的字符串
|
89
|
-
:return: 加密后的十六进制字符串
|
90
|
-
"""
|
91
|
-
sha256_hash = hashlib.sha256(input_string.encode()).hexdigest()
|
92
|
-
return sha256_hash
|
93
|
-
|
94
|
-
|
95
3
|
def gcd(*nums: int) -> int:
|
96
4
|
"""优化后:移除冗余操作"""
|
97
5
|
from math import gcd as _gcd # 模块级导入(关键)
|
@@ -414,16 +322,12 @@ def min_index(*nums, n):
|
|
414
322
|
return sorted_indices[n - 1]
|
415
323
|
|
416
324
|
def math_help():
|
417
|
-
|
418
|
-
print("以下是可用的函数:")
|
325
|
+
# 显示帮助信息
|
419
326
|
print("- gcd(*nums: int) -> int: 计算多个整数的最大公约数")
|
420
327
|
print("- lcm(*nums: int) -> int: 计算多个整数的最小公倍数")
|
421
328
|
print("- is_prime(n) -> bool: 判断一个整数是否为素数")
|
422
329
|
print("- comb(n: int, k: int) -> int: 计算组合数 C(n, k)")
|
423
330
|
print("- pow(x, y): 快速计算 x 的 y 次幂")
|
424
|
-
print("- sha256(input_string: str) -> str: 使用 SHA-256 算法加密字符串")
|
425
|
-
print("- sha3_256(input_string: str) -> str: 使用 SHA3-256 算法加密字符串")
|
426
|
-
print("- sha3_512(input_string: str) -> str: 使用 SHA3-512 算法加密字符串")
|
427
331
|
print("- fib_list(n) -> list: 生成包含前 N 项的斐波那契数列")
|
428
332
|
print("- fib(n) -> int: 返回第 N 项的斐波那契数")
|
429
333
|
print("- pell_list(n) -> list: 生成包含前 N 项的佩尔数列")
|
@@ -1,12 +1,12 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: mlymath
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.4.0b2
|
4
4
|
Summary: 一个用于数学计算的Python库
|
5
5
|
Author: mly
|
6
6
|
Classifier: Programming Language :: Python :: 3
|
7
7
|
Classifier: License :: OSI Approved :: MIT License
|
8
8
|
Classifier: Operating System :: OS Independent
|
9
|
-
Requires-Python: >=3.
|
9
|
+
Requires-Python: >=3.12
|
10
10
|
Description-Content-Type: text/markdown
|
11
11
|
Dynamic: author
|
12
12
|
Dynamic: classifier
|
@@ -23,9 +23,7 @@ Dynamic: summary
|
|
23
23
|
- is_prime(n) -> bool: 判断一个整数是否为素数
|
24
24
|
- comb(n: int, k: int) -> int: 计算组合数 C(n, k)
|
25
25
|
- pow(x, y): 快速计算 x 的 y 次幂
|
26
|
-
|
27
|
-
- sha3_256(input_string: str) -> str: 使用 SHA3-256 算法加密字符串
|
28
|
-
- sha3_512(input_string: str) -> str: 使用 SHA3-512 算法加密字符串
|
26
|
+
|
29
27
|
- fib_list(n) -> list: 生成包含前 N 项的斐波那契数列
|
30
28
|
- fib(n) -> int: 返回第 N 项的斐波那契数
|
31
29
|
- pell_list(n) -> list: 生成包含前 N 项的佩尔数列
|
@@ -46,10 +44,16 @@ Dynamic: summary
|
|
46
44
|
- min(\*nums, n): 找到多个数中第 N 小的数, 输入n时请注意使用n = [num]
|
47
45
|
- list_min_index(nums, n): 找到数组中第 N 小的数的索引
|
48
46
|
- min_index(\*nums, n): 找到多个数中第 N 小的数的索引, 输入n时请注意使用n = [num]
|
47
|
+
- math_help() -> None: 显示math帮助信息
|
48
|
+
- mlymath.RSA RSA
|
49
49
|
- get_rsa_keys(p: int, q: int) -> Tuple[Tuple[int, int], Tuple[int, int]]: 生成 RSA 公钥和私钥
|
50
50
|
- rsa_encrypt(public_key: Tuple[int, int], plaintext: int) -> int: 使用 RSA 公钥加密数据
|
51
51
|
- rsa_decrypt(private_key: Tuple[int, int], ciphertext: int) -> int: 使用 RSA 私钥解密数据
|
52
|
-
-
|
52
|
+
- RSA_help(): 显示帮助信息
|
53
|
+
- mlymath.hash 哈希模块
|
54
|
+
- sha256(input_string: str) -> str: 使用 SHA-256 算法加密字符串
|
55
|
+
- sha3_256(input_string: str) -> str: 使用 SHA3-256 算法加密字符串
|
56
|
+
- sha3_512(input_string: str) -> str: 使用 SHA3-512 算法加密字符串
|
53
57
|
- mlymath.sort 排序模块
|
54
58
|
- quick_sort: 使用快速排序算法对数组进行排序。可通过 reverse 参数控制排序顺序(默认正序)
|
55
59
|
- shell_sort: 使用希尔排序算法对数组进行排序。可通过 reverse 参数控制排序顺序(默认正序)
|
@@ -83,8 +87,17 @@ Dynamic: summary
|
|
83
87
|
- mod7(n): 判断 n 是否能被 7 整除。
|
84
88
|
- mod8(n): 判断 n 是否能被 8 整除。
|
85
89
|
- mod9(n): 判断 n 是否能被 9 整除。
|
90
|
+
- mlymath.random 随机数模块
|
91
|
+
- randint(a, b): 返回[a,b]之间的随机整数
|
92
|
+
- randfloat(a, b): 返回[a,b]之间的随机浮点数
|
93
|
+
- randlst(a, b, n): 返回[a,b]之间的n个随机整数
|
94
|
+
- randls_float(a, b, n): 返回[a,b]之间的n个随机浮点数
|
95
|
+
- randint_notsame(a, b): 返回[a,b]之间的不重复随机整数
|
96
|
+
- randfloat_notsame(a, b): 返回[a,b]之间的不重复随机浮点数
|
97
|
+
- randlst_notsame(a, b, n): 返回[a,b]之间的n个不重复随机整数
|
98
|
+
- randls_float_notsame(a, b, n): 返回[a,b]之间的n个不重复随机浮点数
|
99
|
+
- random_help(): 显示随机数模块的帮助信息
|
100
|
+
|
86
101
|
#### mly万岁!!!🎉
|
87
102
|
#### mly万岁!!!🎉
|
88
103
|
#### mly万岁!!!🎉
|
89
|
-
|
90
|
-
|
@@ -26,11 +26,12 @@ def mod9(n):
|
|
26
26
|
|
27
27
|
def mod_help():
|
28
28
|
print("以下是可用的函数:")
|
29
|
-
print("- mod2(n): 判断 n 是否能被 2
|
30
|
-
print("- mod3(n): 判断 n 是否能被 3
|
31
|
-
print("- mod4(n): 判断 n 是否能被 4
|
32
|
-
print("- mod5(n): 判断 n 是否能被 5
|
33
|
-
print("- mod6(n): 判断 n 是否能被 6
|
34
|
-
print("- mod7(n): 判断 n 是否能被 7
|
35
|
-
print("- mod8(n): 判断 n 是否能被 8
|
36
|
-
print("- mod9(n): 判断 n 是否能被 9
|
29
|
+
print("- mod2(n): 判断 n 是否能被 2 整除")
|
30
|
+
print("- mod3(n): 判断 n 是否能被 3 整除")
|
31
|
+
print("- mod4(n): 判断 n 是否能被 4 整除")
|
32
|
+
print("- mod5(n): 判断 n 是否能被 5 整除")
|
33
|
+
print("- mod6(n): 判断 n 是否能被 6 整除")
|
34
|
+
print("- mod7(n): 判断 n 是否能被 7 整除")
|
35
|
+
print("- mod8(n): 判断 n 是否能被 8 整除")
|
36
|
+
print("- mod9(n): 判断 n 是否能被 9 整除")
|
37
|
+
print("- mod_help(): 显示所有可用的函数")
|
@@ -5,7 +5,7 @@ with open('README.md', 'r', encoding='utf-8') as fh:
|
|
5
5
|
|
6
6
|
setup(
|
7
7
|
name='mlymath',
|
8
|
-
version='0.
|
8
|
+
version='0.4.0-beta2',
|
9
9
|
packages=find_packages(),
|
10
10
|
install_requires=[
|
11
11
|
|
@@ -20,5 +20,5 @@ setup(
|
|
20
20
|
'License :: OSI Approved :: MIT License',
|
21
21
|
'Operating System :: OS Independent',
|
22
22
|
],
|
23
|
-
python_requires='>=3.
|
23
|
+
python_requires='>=3.12',
|
24
24
|
)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|