确定数字是否是质数的最快方法VB

时间:2019-03-18 19:34:50

标签: vb.net numbers primes

我已经为此工作了很多年,我的任务是创建一个程序,该程序计算用户输入的数字是否为质数,该程序计算所用的时间并将其显示给用户,但是我发现了两种方法,一种方法比另一种方法花费更多的时间,但它能产生准确的数字,另一种方法却计算很快,但是它是错误的,我希望有人能帮助我并告诉我最快的方法,这是我的两个代码

代码1:

    Dim ch As String
    ch = "y"

    While ch = "y"

        If (num Mod 2 = 0)  Then
            Console.WriteLine("Is not a prime number!")
        Else
            Console.WriteLine("Is a prime number!")
        End If

代码2:  check = 1'初始化一个检查点以在程序中使用它来确定素数

    Dim Value As Long
    Console.Write(vbLf & "Enter a number To check Whater it is Prime or Not :")
    Value = Long.Parse(Console.ReadLine())
    start_time = Now
    Dim ch As ULong
    ch = 0
    Dim i As ULong
    i = 2
    While (i <= Value / 2)

        If (Value Mod i = 0) Then

            ch = 1
            Exit While

        End If

        i = i + 1

    End While
    If (ch = 0) Then
        Console.WriteLine("Prime Number")
    Else
        Console.WriteLine("Not Prime Number")
    End If

1 个答案:

答案 0 :(得分:0)

有很多主要的测试人员,这个站点上有很多。为了检查单个数字,我使用了Code2的较快变体,并进行了一些额外的检查。这是伪代码:

boolean function isPrime(num)

  //1, 0 and negatives cannot be prime.
  if (num < 2) then
    return false
  endif

  // 2 is the only even prime.
  if (num MOD 2 = 0) then
    return (num = 2)
  endif

  // Check for odd factors.
  limit <- sqrt(num)
  for (factor <- 3; factor <= limit; factor <- factor + 2) do
    if (num MOD factor = 0) then
      return false
    endif
  endfor

  // If we reach this point then the number is prime.
  return true

endfunction

正如@ user448810所说,您应该使用目标编号的平方根作为测试循环的极限。通过分别处理偶数,基本上可以将测试数量减半。取出偶数后,只需测试奇数因子:3、5、7 ...