编程以查找数字是否为质数

问题描述 投票:-1回答:3

我正在使用JavaScript编写一段代码,以检查数字是否为质数。该代码正确地告诉我数字= 1,2,3的结果,但是在某些其他数字(例如10)上失败。我无法弄清楚是什么导致它仅在某些数字上失败。如果有人可以帮助您确定问题并提出建议,我将不胜感激。

if (total < 2) {var prime = "this is not a prime number"}
if (total == 2) {prime = "this is a prime number"}
if (total == 3) {prime = "this is a prime number"}
for (var l = 2; l <= Math.sqrt(total); l++) {
  if (total % l == 0) {prime = "this is not a prime number"}
  else {prime = "this is a prime number"}
}

该代码在html文件中用作功能的一部分

javascript html if-statement for-loop primes
3个回答
3
投票

一旦您知道它不是素数,就应该退出循环,否则结果将在下一次安装时被覆盖。实际上,拥有else子句是没有意义的(因为它只是一遍又一遍地设置相同的值),只需在循环之前设置该值:

prime = "this is a prime number";
for (var l = 2; l <= Math.sqrt(total); l++) {
  if (total % l == 0) {
    prime = "this is not a prime number";
    break;
  }
}

旁注:您无需在循环之前分别检查值23,这些值将被循环中的前两次迭代捕获。


0
投票

首先,对于质数,您不需要检查偶数(2、4、6等),因此您的for循环可以从3开始,l = l + 2。

第二,您如何运行失败?似乎您应该记住状态,如果状态不是素数,则中断循环(或者如果不是,则不知道您想要什么)。

此外,您可以通过对所需数字的一半进行循环来进一步优化此效果。因此,如果要从3变为sqrt(总数),可以通过转到sqrt(总数)/ 2进行优化。


0
投票

Guffa,您的方法是正确的,但是您可以通过包含两个条件来提高大量算法的效率。1.检查数字是否可被2整除。对于偶数,它直接给出结果。如果这种情况已经减少了一半的重复次数数字是奇数。2.关于质数有一个非常有趣的事实,大多数人不知道每个素数都恰好在6的倍数之前或恰好在六的倍数之后。我的意思是。例如54是一个6的倍数。在56.Let之前或之后必须有一个质数。支票:54 + 1 = 55,而不是素数:54-1 = 53是素数。清楚了。现在,我们将反向使用此属性,“每个素数必须前后有6的倍数。”如果我必须检查105是否为是否有质数。一种。检查105 + 1 = 106是否为6的倍数?没有b。检查105-1 = 104是否为6的倍数?没有因此105绝对不能是质数。3.您可能会注意到该算法存在歧义。你只能判断数字是否不是此属性的质数,但它不能说明您确定数量是素数。我提到你必须检查对于6的倍数,如果是6的倍数,则在或之前应有素数在该倍数之后,但不清楚是在此之前还是之后。所以,您也必须处理。我们只能检查不是Prime,但可以减少大量计算。

我的代码:-

// The following code is written in Python. But anyone beginner level Programmer can understand it.

i = '140740731462387462836487236478236487236487384783'
k = int(i)
if (int(i[-1])%2 == 0): #Get the last didgit of the number and check if it is 
                        #even.One can also just divide the whole num by 2
    print('a.Not a Prime')
elif not((k-1)%6==0 or (k+1)%6==0):#Check for multiple of six.
    print('b.Not a Prime')
else :
    for j in range(3,int(k**(1/2))+2,2): # Final approach.Increment index by 2 
                                         #because you have already checked for 
                                         #even numbers.
        print(j)
        if (k%j==0):
            print('c.Not a Prime'+str(j))
            check=0
            break
        check =1
if (check ==1):
    print('A prime Number')

谢谢,Mahyar Ali

© www.soinside.com 2019 - 2024. All rights reserved.