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