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

Julia和Python比较中给定两个数之间的素数

卢阳泽
2023-03-14

请参阅Python代码,在给定的两个数字下部和上部之间查找质数:

lower = 3
upper = 15

print("Prime numbers between", lower, "and", upper, "are:")

for num in range(lower, upper + 1):

   for i in range(2, num):
       if (num % i) == 0:
           break
   else:
       print(num)

Python输出:

Prime numbers between 3 and 15 are:
3
5
7
11
13

几乎相似的代码在朱莉娅给出不正确的输出。请参阅下面的Julia代码:

lower = 3
upper = 15
println("Prime numbers between ", lower, " and “, upper, " are:”)
for num in lower:upper    
    for i in 2: num-1
        if (num % i) == 0
            break           
        else
            println(num)
            break
        end
    end
end

Julia输出:

Prime numbers between 3 and 15 are:
3
5
7
9
11
13
15

显然,9和15不是质数。为什么Python代码给出正确的输出,而Julia代码没有。有没有办法用同样的算法逻辑来解决它?

共有2个答案

卓宏达
2023-03-14

您的Julia代码似乎在内部打印,并打破了因子检查循环,而不是等待所有因子都得到验证。(我不认识朱莉娅,但这似乎是一个明显的区别)。

子车安和
2023-03-14

这是我将使用的代码,保持相同的算法逻辑每个您的请求(我这样写这段代码,因为循环内的条件不仅有效,而且读起来很自然:任何数字从范围2: num-1划分num或printnum):

julia> lower = 3
3

julia> upper = 15
15

julia> println("Prime numbers between $lower and $upper are:")
Prime numbers between 3 and 15 are:

julia> for num in lower:upper
           any(i -> num % i == 0, 2:num-1) || println(num)
       end
3
5
7
11
13

根据Julia中对您的问题的评论,您在for循环中没有else子句。但是,使用any函数保持与代码相同的逻辑,因为它是一个短循环函数(实现与for循环中的break相同的效果)。

如果我的代码中有什么不清楚的,请告诉我。

编辑:

我将重写代码来解释它是如何工作的。

首先是|部分。它使用| |运算符的短循环行为。因此,在第一个层次上,可以将其改写为:

julia> lower = 3
3

julia> upper = 15
15

julia> println("Prime numbers between $lower and $upper are:")
Prime numbers between 3 and 15 are:

julia> for num in lower:upper
           iscomposite = any(i -> num % i == 0, 2:num-1)
           if !iscomposite
               println(num)
           end
       end
3
5
7
11
13

现在,正如注释的,任何也在做短循环,所以它相当于写:

julia> lower = 3
3

julia> upper = 15
15

julia> println("Prime numbers between $lower and $upper are:")
Prime numbers between 3 and 15 are:

julia> for num in lower:upper
           iscomposite = false
           for i in 2:num-1
               if num % i == 0
                   iscomposite = true
                   break
               end
           end
           if !iscomposite
               println(num)
           end
       end
3
5
7
11
13
 类似资料:
  • 我试图建立一个函数,检查一个单词或文本是否是回文。要做到这一点,它拆分文本,使每个字母都是一个新数组的元素,它去掉空白,并建立反向数组。然后检查两个数组中处于相同位置的每个元素是否相等。如果不是,则返回false,如果是,则返回true。这里的函数是: 我不知道出了什么问题,但是不管我传递给函数什么单词或文本,函数似乎都在返回一个真值。那有什么不好?

  • 问题内容: 有人遇到过这个问题吗?假设您有两个类似以下的数组 有没有一种方法可以比较b中a中的哪些元素?例如, 我正在尝试避免循环,因为要花费数百万个元素才能解决问题。有任何想法吗? 干杯 问题答案: 实际上,有一个比以下任何一种方法更简单的解决方案: 所得的c为:

  • 我想比较这两个函数的值。不幸的是,我试图使,但我一直得到。 我想检查如果。这就是我上面完整的代码。

  • 问题内容: 与oracle diff 相同:如何比较两个表?除了在MySQL。 假设我有两个表t1和t2,它们的布局相同,但是可能包含不同的数据。 区分这两个表的最佳方法是什么? 更准确地说,我正在尝试找出一个简单的SQL查询,该查询告诉我t1中某一行的数据是否不同于t2中相应行的数据 看来我不能使用相交也不能减去。当我尝试 我收到错误代码: [错误代码:1064,SQL状态:42000]您的SQ

  • 我得到了两个字符串类型arraylist。一个列表包含“book1”、“book2”、“book3”和“book4”。另一个arrayList包含“book1”、“book2”、“book3”。因此,第一个列表的大小为4,第二个列表的大小为3。我创建了另一个与第一个列表大小相等的arrayList 但是当我这样做的时候,我不能设置1,因为我不能进入if状态,有人能帮我吗

  • 问题内容: 我得到了两个String类型的arraylist ..一个包含“ book1”,“ book2”,“ book3”和“ book4”的列表。另一个arrayList包含“ book1”,“ book2”,“ book3”。因此,第一个列表的大小为4,第二个列表的大小为3。我创建了另一个与第一个列表的大小相等的arrayList 如果两个列表之间的内容相等,那么我将设置为1而不是0。 所