鱼C论坛

 找回密码
 立即注册
查看: 2075|回复: 8

求求大佬们帮忙写一下这个代码吧,头要秃了

[复制链接]
发表于 2022-3-29 16:38:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 aiffan. 于 2022-3-29 16:41 编辑

输入正整数n(2<=n< 1000 ),计算有多少对素数的和等于输入的这个正整数,并输出结果。
例如: input 10
输出对数结果为: 2对
两对素数分别为: (5, 5) (3.7)
用python帮忙写个代码吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-29 17:16:20 | 显示全部楼层
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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-3-29 17:48:07 | 显示全部楼层
# 求素数
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[idx:]:
            if v1+v2==n:
                sumlst.append([v1, v2])
    return sumlst


n  = int(input('请输入一个数n,2<=n<1000:'))

print(test(n))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-29 18:37:00 | 显示全部楼层
本帖最后由 傻眼貓咪 于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-3-30 16:15:17 | 显示全部楼层

老哥,你这判断是不是质数的是什么原理?我看不懂。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-30 16:43:13 From FishC Mobile | 显示全部楼层
leafu 发表于 2022-3-30 16:15
老哥,你这判断是不是质数的是什么原理?我看不懂。。。。

感谢兄弟发现,我写错了,已修改。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-30 17:25:41 | 显示全部楼层
傻眼貓咪 发表于 2022-3-30 16:43
感谢兄弟发现,我写错了,已修改。

老哥,我主要是不理解你这个程序中对质数的判定方法,可以见解一下不?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-30 17:32:14 | 显示全部楼层
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 # 否则返回真
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-2 17:05:28 | 显示全部楼层
本帖最后由 Stubborn 于 2022-4-2 17:27 编辑

def getPrime(n):
    primes = [True] * n
    primes[0], primes[1] = False, False
    for (i, prime) in enumerate(primes):
        if prime:
            for j in range(i * i, n, i): primes[j] = False
    return [k for (k, trueprime) in enumerate(primes) if trueprime]

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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 02:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表