求求大佬们帮忙写一下这个代码吧,头要秃了
本帖最后由 aiffan. 于 2022-3-29 16:41 编辑输入正整数n(2<=n< 1000 ),计算有多少对素数的和等于输入的这个正整数,并输出结果。
例如: input 10
输出对数结果为: 2对
两对素数分别为: (5, 5) (3.7)
用python帮忙写个代码吧{:5_92:} def sushu(num): # 判断素数
if num == 2:
return True
else:
for i in range(2, num):
if not num % i:# 如果能整除 not 0 =1
return False
return True
res = []# 存放结果
count_head = []# 防重放
a = int(input("正整数n(2<=n< 1000):"))
for i in range(a):
for j in range(a):
if sushu(i) and sushu(j) and i + j == a:
if j not in count_head:
res.append((i, j))
count_head.append(i)
if len(res):
print(f"对数结果为: {len(res)}对")
print(*res) # 求素数
def isPrimeNumber(n):
k = int(n ** 0.5) # 求出n的平方根
isPn = True
for i in range(2, k+1):
if n%i==0: # 不是素数
isPn = False
break
return isPn
# 获取所有数素
def allPrimeNumber(n):
primeNumber = []
for i in range(2, n+1):
if isPrimeNumber(i):
primeNumber.append(i)
return primeNumber
def test(n):
primeNumbers = allPrimeNumber(n)
sumlst = []
for idx, v1 in enumerate(primeNumbers):
for v2 in primeNumbers:
if v1+v2==n:
sumlst.append()
return sumlst
n= int(input('请输入一个数n,2<=n<1000:'))
print(test(n))
本帖最后由 傻眼貓咪 于 2022-3-30 16:42 编辑
def isPrime(num):
if num < 2: return False
elif num == 2: return True
for n in range(2, int(num**.5) + 1):
if not num%n:
return False
return True
n = int(input())
res = [(num, n - num) for num in range((n >> 1) + 1) if isPrime(num) and isPrime(n - num)]
print(f"输出对数结果为: {len(res)} 对\n{len(res)} 对素数分别为:", *res) 傻眼貓咪 发表于 2022-3-29 18:37
老哥,你这判断是不是质数的是什么原理?我看不懂。。。。 leafu 发表于 2022-3-30 16:15
老哥,你这判断是不是质数的是什么原理?我看不懂。。。。
感谢兄弟发现,我写错了,已修改。 傻眼貓咪 发表于 2022-3-30 16:43
感谢兄弟发现,我写错了,已修改。
老哥,我主要是不理解你这个程序中对质数的判定方法,可以见解一下不? leafu 发表于 2022-3-30 17:25
老哥,我主要是不理解你这个程序中对质数的判定方法,可以见解一下不?
def isPrime(num):
if num < 2: return False # 当数字小于 2 返回假,最小质数是 2
elif num == 2: return True # 当数字等于 2 返回真,2 是唯一偶数质数
for n in range(2, int(num**.5) + 1): # 从 2 开始循环至 num 的平方根 + 1,诺有数字可以被 num 除整,表示这是 num 的因数,则返回假
if not num%n:
return False
return True # 否则返回真 本帖最后由 Stubborn 于 2022-4-2 17:27 编辑
def getPrime(n):
primes = * n
primes, primes = False, False
for (i, prime) in enumerate(primes):
if prime:
for j in range(i * i, n, i): primes = False
return
n = random.randint(0, 1000)
nn = n // 2
result = []
R = getPrime(n)
for each in R:
if each > nn:
break
if (n - each) in R:
result.append((each, n - each))
print(result)
页:
[1]