我的代码是:

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)

当我运行代码时,它会打印每个数字的倍数,每个数字都有一个特定两个数字的随机数.我在修复代码时遇到问题.我问过其他比我更精通编码的人,但他们无法解决这个问题.非常感谢您的帮助.非常感谢.

推荐答案

The output is not random, but as the desired output is not defined, I'll start with explaining what the current algorithm actually does;
The code can be split in to two main functionalities. The first functionality looks for a prime number n. If n is not prime, the code continues to the next n:

for n in range(1,10000000):
 if n>1:

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

第二个功能只有在n为prime(for..else的巧妙使用)时才发挥作用.它现在将判断n+2是否可以被2到n+1之间的任何数字整除.在下面的片段中,我冒昧地将v替换为n+2,因为我相信这会让事情更清楚一些;

   else:
       #v = 2+n  # taking liberty..
       for i in range(2, n+2):
           if (n+2) % i == 0:
               break  
           else:
               print(n, n+2)

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

 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整除.

 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:

 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).由于序列11 13不能被i中的任何数字整除,因此将打印i的长度,即11(它将始终是n,因为我们从2开始,并将2添加到n).

 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)

这是较低数字领域的第一个有趣的 case .到23岁时,所有n+2人要么是素数,要么可以被3整除;它们被打印了n次,或者只有一次.对于n=23,序列23 25被打印3次,因为25不能被2、3或4整除(3次打印),但它可以被5整除,所以现在循环再次中断,并继续到下一个素数n.

同样,您要查找的结果输出不清楚,但通过阅读前面的 comments ,我必须警告-此解决方案不会打印由2分隔的两个素数(如@alani所示),它只会确保每行只打印一次:

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

Python相关问答推荐

CustomTKinter-向表单添加额外的输入字段

如何编写一个正规表达式来查找序列中具有2个或更多相同辅音的所有单词

了解shuffle在NP.random.Generator.choice()中的作用

ambda将时间戳与组内另一列的所有时间戳进行比较

运行回文查找器代码时发生错误:[类型错误:builtin_index_or_system对象不可订阅]

删除最后一个pip安装的包

非常奇怪:tzLocal.get_Localzone()基于python3别名的不同输出?

从numpy数组和参数创建收件箱

Pandas - groupby字符串字段并按时间范围 Select

SQLAlchemy Like ALL ORM analog

如何根据一列的值有条件地 Select 前N个组,然后按两列分组?

Pandas Loc Select 到NaN和值列表

如何在Python中找到线性依赖mod 2

多处理队列在与Forking http.server一起使用时随机跳过项目

将pandas导出到CSV数据,但在此之前,将日期按最小到最大排序

Pandas Data Wrangling/Dataframe Assignment

在Python中计算连续天数

Matplotlib中的字体权重

如何防止Pandas将索引标为周期?

Beautifulsoup:遍历一个列表,从a到z,并解析数据,以便将其存储在pdf中.