python求素数合问题

img


我的初步思路如下,就是跑了一下发现没有符合条件的,不知道哪里出了问题:


import math
T=int(input())
s=0
for i in range(T):
    m,n=map(int,input().split())#T组数据放入循环之中
    for j in range(m,n+1):#遍历m到n的各个数方便检验是否为素数
        for k in range(2,int(math.sqrt(n))+1):#从2开始到根号n遍历看是否有其他因子
            if j%k!=0:#m到n中的某个数j没有其他因子
                s+=j#将这个素数j加起来
                print(s)#输出素数和
                break
        

import math
T = int(input())
for i in range(T):
    m,n=map(int,input().split())
    s = 0
    for j in range(max(2, m), n+1):
        v = 1
        for k in range(2,int(math.sqrt(j))+1):
            if j % k == 0:
                v = 0
                break
        if v == 1:
            s += j
    print(s)

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7535673
  • 你也可以参考下这篇文章:python用户名正则只允许数字字母下划线组合,且不能以数字下换线开头,不能有中文和特殊字符。
  • 同时,你还可以查看手册:python- 走向编程的第一步 中的内容
  • 除此之外, 这篇博客: Python组合数据类型——字典翻转输出:读入一个字典类型的字符串,反转其中键值对输出中的 总结 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    这道题的关键是熟悉字典的操作方法。

  • 您还可以看一下 jeevan老师的Python量化交易,大操手量化投资系列课程之内功修炼篇课程中的 基础编程之股票行情构造小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    我会给出两种解决方案。第一种方案利用之前的思路做了些许修改,第二种方案则利用埃拉托斯特尼筛法实现素数筛选。

    方案一: 在你之前的代码中,有一个错误,就是循环的范围应该是从2~该数的平方根+1,而不是从2~该数-1。因为质数的定义是只能被1和本身整除,所以当一个数不能被2~该数的平方根+1之间任意一个数整除时,这个数才是素数。以下是修改后的代码:

    import math
    
    def prime_sum(n):
        result = 0
        for num in range(2, n + 1):  # 遍历2~n的所有自然数
            for i in range(2, int(math.sqrt(num)) + 1):  # 判断该数是否为素数
                if num % i == 0:  # 能被整除,不是素数
                    break
            else:  # 不能被整除,是素数
                result += num
        return result
    

    方案二: 利用埃拉托斯特尼筛法实现素数筛选。首先,我们先生成一个包含范围内所有自然数的列表,然后从2开始,将其所有的倍数从列表中删除,最后剩余的所有数即为素数。以下是代码实现:

    def prime_sum(n):
        nums = list(range(2, n + 1))  # 生成所有自然数列表
        primes = []  # 保存素数的列表
        while nums:
            prime = nums.pop(0)  # 第一个数一定是素数
            primes.append(prime)
            nums = [num for num in nums if num % prime != 0]  # 将该素数的所有倍数从列表中删除
        return sum(primes)
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^