【发布时间】:2017-11-08 22:35:45
【问题描述】:
我在编程平台上遇到了挑战(CodeWars - “查找除数”),我的算法似乎太慢了。 这是我从平台得到的错误:进程已终止。完成时间超过 12000 毫秒
这是挑战说明: 创建一个名为 divisors/Divisors 的函数,它接受一个整数并返回一个包含所有整数除数的数组(除了 1 和数字本身)。如果数字是素数,则返回字符串 '(integer) is prime'(在 C# 中为 null)
public static int[] Divisors(int n /* out int numfactors*/)
{
List<int> divArray = new List<int>();
int div;
if (isPrime(n))
{
return divArray.ToArray();
}
else
{
for (div = 2; div < n / 2 + 1; div++)
{
if (n % div == 0)
{
divArray.Add(div);
}
return divArray.ToArray();
}
}
}
public static bool isPrime(int n)
{
int d = 2;
if (n == 1 && n % 2 == 0 && n != 2) return false;
while (d * d <= n)
{
if (n % d == 0) return false;
d = d + 1;
}
return true;
}
我做错了什么,我该如何优化这个算法?如果我测试一个素数,我的代码会返回“无”,我认为这是另一个问题。 如果数字是素数,并且我正在尝试 return null 我的程序因以下原因而崩溃: “对象引用未设置为对象的实例”
【问题讨论】:
-
由于您的代码不会产生正确的结果,因此可以对其进行优化以始终返回相同的值,从而继续当前的行为。如果这还不够,您需要使用可靠的minimal reproducible example 将问题缩小到单个问题。
-
@therapt cr 不是非工作代码的正确位置。
-
挑战不希望您计算数字是否为素数 - 它希望您计算并返回所有正除数(除了 1 和数字本身)。只有当没有(因此它是素数)时才返回“n 是素数”。
-
for...循环内的返回似乎是完全错误的。我很想看看这个sn-p的main
-
不要在代码战上作弊!
标签: c# arrays primes object-reference