题目描述
RSA加密算法在网络安全世界中无处不在,它利用了极大整数因数分解的困难度,数据越大,安全系数越高,给定一个32位正整数,请对其进行因数分解,找出是哪两个素数的乘积。
输入描述
-
一个正整数num
-
0 < num <= 2147483647
输出描述
- 如果成功找到,以单个空格分割,从小到大输出两个素数,分解失败,请输出-1 -1
示例一
输入
15
输出
3 5
代码实现
python
# coding:utf-8
# 素数之积
import math
class Solution:
def primeProdcut(self, n):
s = int(math.sqrt(n))
res = ''
flag = False
for i in range(2, s + 1):
if n % i == 0:
if self.is_prime(i) and self.is_prime(n // i):
flag = True
if i < n // i:
res = f"{i} {n // i}"
else:
res = f"{n // i} {n}"
if flag:
return res
else:
return "-1 -1"
def is_prime(self, n):
if n < 2:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
if __name__ == '__main__':
s = int(input("input:"))
solution = Solution()
print(solution.primeProdcut(s))