最小质数合数之和问题

题目描述:

查找大于正整数n的最小质数和最小合数之和。

质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

合数是指在大于1的整数中除了能被1和本身整除外,还能被其他数(0除外)整除的数。

输入:

一个正整数n,题目保证1≤n≤1000000000

输出:

一个正整数,表示大于正整数n的最小质数和最小合数之和。

样例输入:

1
1

样例输出:

1
6

样例输入:

1
96

样例输出:

1
195

注释:

对于第一组样例:n1的情况下,最小素数为2,最小合数为4,因此答案为2+4=6

第一次提交

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def isprime(num):
if num < 2:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True


n = int(input())
nums = []
tag = 0
n = n + 1
while True:
if len(nums) == 2:
break
if isprime(n):
if tag == 0:
nums.append(n)
tag = 1
else:
nums.append(n)
n += 1
print(sum(nums))
# print(nums)

测试用例通过,但是代码存在问题,原因:可能存在连续有两个合数那么将会退出

第二次提交

正确解法,分开来进行单独求,利用两次死循环,一次找最小的质数,一次找最小的合数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def isPrime(num):
if num < 2:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True


if __name__ == '__main__':
n = int(input())
zhishu = 0
heshu = 0
k = n + 1
while True:
if isPrime(k):
zhishu = k
break
k = k + 1
k = n + 1
while True:
if not isPrime(k):
heshu = k
break
k = k + 1
print(zhishu + heshu)