首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python多次打印单个打印

Python多次打印单个打印
EN

Stack Overflow用户
提问于 2022-05-24 22:25:53
回答 2查看 70关注 0票数 2

我的代码是:

代码语言:javascript
复制
for n in range(1,10000000):  
    if n>1:
        for i in range(2,n):
            if n % i == 0:
                break
        else:
            v = 2+n
            for i in range(2,v):
                if v % i == 0:
                    break  
                else:
                    print(n,v)

当我运行代码时,它会打印每个数字的多个,每个数字都有一个特定两个数字的随机数。我在修改密码方面有困难。我问过那些比我更精通编码的人,但他们无法解决这个问题。我们将非常感谢您的帮助。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-25 01:44:28

输出不是随机的,但是由于没有定义期望的输出,我将从解释当前算法的实际操作开始;

代码可以分为两个主要功能。第一个功能是查找素数n。如果n不是素数,则代码继续到下一个n

代码语言:javascript
复制
for n in range(1,10000000):
 if n>1:

   for i in range(2,n):
      if n % i == 0:
          break

只有当n是素数(for..else的巧妙使用)时,第二种功能才会发挥作用。现在它将检查n+2是否可以被从2到n+1的任何数字整除。我冒昧地在下面的片段中用v替换了n+2,因为我认为它使事情变得更清楚了;

代码语言:javascript
复制
   else:
       #v = 2+n  # taking liberty..
       for i in range(2, n+2):
           if (n+2) % i == 0:
               break  
           else:
               print(n, n+2)

为了说明实际发生的情况,我选择了素数571123,因为我相信这四个元素可以很好地解释输出。从5开始:

代码语言:javascript
复制
 for i in range(2, 7):  # i -> [2, 3, 4, 5, 6]
     if (7) % i == 0:
         break
     else:
         print(5, 7)

在上面的片段中,5 7将被打印5次,为循环中的每个i打印一次,因为7是素数,不能被任何给定的i整除。

代码语言:javascript
复制
 for i in range(2, 9):  # i -> [2, 3, 4, 5, 6, 7, 8]
     if (9) % i == 0:
         break
     else:
         print(7, 9)

在这里,您会发现7 9只打印一次,因为9不能被2整除,但是它可以被3整除--在这种情况下,循环会中断,并继续到下一个素数n。现在让我们来看看n=11

代码语言:javascript
复制
 for i in range(2, 13):  # i -> [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
     if (13) % i == 0:
         break
     else:
         print(11, 13)

这里,和n=5一样,n+2也是素数(13)。由于它不能被i中的任何数字除以,所以序列11 13将被打印为i的长度,即11 (当我们从2开始并将2添加到n时,它始终是n )。

代码语言:javascript
复制
 for i in range(2, 25):  # i -> [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
     if (25) % i == 0:
         break
     else:
         print(23, 25)

这是在低数领域的第一个有趣的例子。最多23,所有n+2要么是素数,要么是可除以3;它们是打印的n时间,或仅仅一次。使用n=23,序列23 25被打印3次,因为25不能被2、3或4 (3打印)整除,但是它可以被5整除,所以现在循环再次中断,并继续到下一个素数n

同样,您正在寻找的结果输出并不清楚,但是阅读我必须警告的前面的注释--这个解决方案不会打印两个质数,分隔为2(如@alani所示),它只需确保每一行只打印一次:

代码语言:javascript
复制
for n in range(3,10000000):


     for i in range(2,n):
        if n % i == 0:
            break

     else:
         v = 2+n
         for i in range(3,v):
             if v % i:
                 print(n,v)
                 break
票数 2
EN

Stack Overflow用户

发布于 2022-05-24 23:45:51

我做到了,所以它每次只打印一次,而且每次只打印一个数字的平方根,因为它已经过了过头了

代码语言:javascript
复制
for n in range(2,10000000): #started at 2 instead of 1
  #removed if statement because i changed start from 1 to 2
  for i in range(2,int(n**0.5) + 2): #now goes to square root plus 1(to correct for automatic rounding down)
    if n % i == 0:
      break
           
    else:
      v = n + 2
      for f in range(2,int(v**0.5) + 2): #now goes to square root plus 1(to correct for automatic rounding down)
        if v % f == 0:
          break
        elif f == int(v**0.5) + 1: #changed else to elif with condition of being at last iterated integer
          print(n,v)

我不想完全修改代码,但是如果您想提高效率,我建议您创建一个找到素数的列表(每次找到一个素数),然后使用for循环迭代到当前值的平方根(因为对复合数字的迭代效率很低,因为它们是素数的倍数)。

希望这是你想要的,如果不是,我可以试着做进一步的帮助,也请不要把我的建议当作批评或任何事情,这只是我的意见,可能会让你的代码运行得更快

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72370096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档