尝试创建一个函数来判断一个数字是否为质数。我做错了什么?我所有的测试都通过了,但是有一个 edabit.com 测试失败了
Trying to make a function to tell is a number is prime or not. What did I do wrong? All my tests pass, but one edabit.com test failed
这是用来判断它是否是质数的代码。请告诉我我做错了什么。
public class Program
{
public static bool isPrime(int x)
{
int i = 2;
while (i < x)
{
double divided = ((double) x / (double) i);
if (divided % 1 == 0)
{
return false;
}
i++;
}
return true;
}
}
许多测试中只有一个失败,所以我确定这是一些模糊的边缘情况。
通常,失败的是边界案例。在您的实现中,它是 1
,它 不是质数 ,而是 isPrime(1)
returns true
。您可以在 Linq:
的帮助下测试例程
using System.Linq;
...
private static bool IsIntPrime(int value) {
if (value <= 1)
return false;
else if (value % 2 == 0)
return value == 2;
int n = (int)(Math.Sqrt(value) + 0.5);
for (int i = 3; i <= n; i += 2)
if (value % i == 0)
return false;
return true;
}
查询时间:
var failedTests = Enumerable
.Range(0, 100) // let's test [0..99] range
.Select(x => new {
x,
expected = IsIntPrime(x),
actual = isPrime(x)
})
.Where(item => item.actual != item.expected)
.Select(item => $"{item.x,3} expected: {item.expected,5} actual: {item.actual,5}");
Console.Write(string.Join(Environment.NewLine, failedTests));
结果:
0 expected: False actual: True
1 expected: False actual: True
更正:
public static bool isPrime(int x)
{
// All numbers which are less or equal to 1 are not primes
if (x <= 1)
return false;
int i = 2;
...
}
这是用来判断它是否是质数的代码。请告诉我我做错了什么。
public class Program
{
public static bool isPrime(int x)
{
int i = 2;
while (i < x)
{
double divided = ((double) x / (double) i);
if (divided % 1 == 0)
{
return false;
}
i++;
}
return true;
}
}
许多测试中只有一个失败,所以我确定这是一些模糊的边缘情况。
通常,失败的是边界案例。在您的实现中,它是 1
,它 不是质数 ,而是 isPrime(1)
returns true
。您可以在 Linq:
using System.Linq;
...
private static bool IsIntPrime(int value) {
if (value <= 1)
return false;
else if (value % 2 == 0)
return value == 2;
int n = (int)(Math.Sqrt(value) + 0.5);
for (int i = 3; i <= n; i += 2)
if (value % i == 0)
return false;
return true;
}
查询时间:
var failedTests = Enumerable
.Range(0, 100) // let's test [0..99] range
.Select(x => new {
x,
expected = IsIntPrime(x),
actual = isPrime(x)
})
.Where(item => item.actual != item.expected)
.Select(item => $"{item.x,3} expected: {item.expected,5} actual: {item.actual,5}");
Console.Write(string.Join(Environment.NewLine, failedTests));
结果:
0 expected: False actual: True
1 expected: False actual: True
更正:
public static bool isPrime(int x)
{
// All numbers which are less or equal to 1 are not primes
if (x <= 1)
return false;
int i = 2;
...
}