当前位置: 首页 > 知识库问答 >
问题:

Eratosthenes Sieve-找到划掉数字的顺序

卫劲
2023-03-14

第一次出租。我说这不是家庭作业:)在Eratostennes Sieve中,从1到给定的数字k,我想找到并返回划掉给定数字n的顺序,而不使用列表、元组、集合和字典(或此类数据结构)

我想出了下面的代码,它将向我显示从2到k的总合数。但是我无法提出我的主要问题的一般想法。

k = int (input())
n = int (input())
order = 0 
for i in range(2,n+1):
   for j in range(2,i): 
     if i%j ==0: 
         order += 1  
         break
print (order)

举个例子,如果你注意到数字1-10的代码,你会看到10在9后面被划掉了。而事实并非如此。如果你能帮我修改这段代码,我将不胜感激,因为我已经在这上面思考了7个星期了

共有2个答案

刘焱
2023-03-14

埃拉托斯特尼筛(Sieve of Eratosthennes)从4的倍数2(=2^2)开始,然后从9的倍数3(=3^2),以此类推,穿过素数。你可以用你目前所发现的来决定下一个要使用的素数。

这给出了删除顺序:4,6,8,10,...9, 12, 15, 18, ...25, 30, 35, 40, ...49, 56, 63, 70, ...121, 132, 143, ...

白腾
2023-03-14

这执行您的问题描述所说的操作。我们保留一组已经划掉的合数。对于范围内的每个数字,如果它不是一个已知的复合,那么我们“划掉”该数字的所有倍数,这些倍数尚未在合成集中。我们在划掉复合材料时打印它们。

k = int(input())
n = int(input())
comps = set()
order = 0 
for i in range(2,n+1):
    if i in comps:
        continue
    for j in range(i+i,n,i):
        if j not in comps:
            comps.add(j)
            print(j)
            if j == k:
                order = len(comps)
print()
print(order)
 类似资料:
  • 问题内容: 在我的Java程序中,我已经在一个类中导入了一些Java包。但在那里有1或2个包装被划掉。 为什么会这样?如何解决这种交叉使之交叉? 问题答案: 这些类标记为。 这意味着编译器建议不要使用它们,因为它们会给您带来问题。 注释为@Deprecated的程序元素是不鼓励程序员使用的元素,通常是因为这样做很危险,或者因为存在更好的替代方法。当在不推荐使用的代码中使用或覆盖不推荐使用的程序元素

  • 我正在尝试制作计算器,但我对JTextField有一个问题。当我点击数字(JButtons),比如1,2,3,4,5,它们就会出现在JTextField上,比如54321。那么,我怎样才能把它改成12345而不是54321呢?

  • 我已经在JMeter中编写了一个测试计划,当通过JMeterUI或Windows命令行运行时,该计划运行良好。但是,如果我在windows计划程序中创建一个任务并尝试运行它,则会收到以下错误消息:

  • 我有一个任务需要完成:

  • 问题内容: 有什么简单的方法或功能可以确定python列表中的最大数量?我只可以编写代码,因为我只有三个数字,但是如果我可以使用内置函数或类似的东西告诉最大的代码,那么它将使代码的冗余度降低很多。 问题答案: 关于什么

  • 问题内容: 我有在另一个主题上找到的这段代码,但是该代码按连续字符而不是字母顺序对子字符串进行排序。如何按字母顺序更正?它打印出来了,我想打印。谢谢 ps:我是python的初学者 问题答案: 尝试更改此: 对此: 这将显示您的示例输入字符串。代码更简单,因为您正试图解决一个更简单的问题:-)