Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 编程查找一个数是否为素数_Javascript_Html_If Statement_For Loop_Primes - Fatal编程技术网

Javascript 编程查找一个数是否为素数

Javascript 编程查找一个数是否为素数,javascript,html,if-statement,for-loop,primes,Javascript,Html,If Statement,For Loop,Primes,我正在使用JavaScript编写一段代码来检查一个数字是否为素数。代码正确地告诉我number=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)

我正在使用JavaScript编写一段代码来检查一个数字是否为素数。代码正确地告诉我number=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"}
}
if(total<2){var prime=“这不是质数”}
如果(total==2){prime=“这是一个素数”}
如果(total==3){prime=“这是一个质数”}

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

其次,你的函数是如何失败的?似乎你应该记住状态,如果它不是素数,就中断循环(或者如果是素数,就不知道你想要什么)


此外,您还可以通过将for循环设置为所需数量的一半来对此进行更多优化。因此,如果您希望从3设置为sqrt(总计),您可以通过设置sqrt(总计)进行优化/2.

一旦知道它不是素数,就应该退出循环,否则结果将在下一次迭代中被覆盖。使用
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;
  }
}
prime=“这是一个质数”;

对于(var l=2;lGuffa,您的方法是正确的,但是您可以通过包含两个条件来提高算法的效率。 1.检查一个数字是否可以被2整除。 对于偶数,它直接给出结果。 这种情况已经减少了一半的重复次数,如果 这个数字是奇数。 关于素数有一个非常有趣的事实,大多数人 不知道。每个素数都只在6的倍数之前出现 或者正好在6的倍数之后。我的意思是,例如,54是a 6的倍数。在56之前或之后必须有一个素数。让我们
检查:54+1=55,不是质数:54-1=53是质数 很清楚。现在我们将使用这个属性的相反形式“每个素数必须 在它之前或之后有一个6的倍数 质数与否。 a、 检查105+1=106是否为六的倍数?否 b、 检查105-1=104是否为六的倍数?否 所以105永远不可能是质数。 3.您可能会注意到此算法中存在歧义。您只能 确定一个数字是否不是具有此属性的素数,但它不能说明 你知道质数的确定性,我说过你必须检查 对于6的倍数,如果是,那么在或之前应该有一个素数 在那个倍数之后,但不清楚是在那个倍数之前还是之后。所以, 你也必须处理这个问题。我们只能检查非素数,但它可以 减少了大量的计算

我的密码:-

//以下代码是用Python编写的。但是任何初学者都能理解。
i='140740731462387462836487236478236487236487384783'
k=int(i)
如果(int(i[-1])%2==0):#获取数字的最后一个didgit并检查它是否为
#偶数。也可以将整个数除以2
打印('a.不是素数')
elif not((k-1)%6==0或(k+1)%6==0):#检查六的倍数。
打印('b.不是素数')
其他:
对于范围(3,int(k**(1/2))+2,2)内的j:#最终进近。将索引增加2
#因为你已经检查过了
#偶数。
印刷品(j)
如果(k%j==0):
打印('c.非素数'+str(j))
检查=0
打破
检查=1
如果(检查==1):

打印('A prime Number')
一旦发现该数字不是质数,就需要打破循环。该算法是正确的,但不适合于性能。应忽略除2以外的偶数。每一步应将循环增加2。这将提高性能