I made this so I can feed it integers and return an array with all the divisors of that integer. I put checks in in case the integer is less than 2. Order of integers in the array must be smallest to largest. The code works. What I need is to optimize this code to be as fast as possible. Right now on an online IDE I am getting around 40ms combined against the given test. I need to trim this down as much as possible.
using System.Collections.Generic;
public class Divisors
{
public static bool IsPrime(int n)
{
if (n == 2) return true;
if (n % 2 == 0) return false;
for (int x = 3; x * x <= n; x += 2)
if (n % x == 0)
return false;
return true;
}
public static int[] GetDivisors(int n)
{
List<int> divisors = new List<int>();
if (n < 2)
{
return null;
}
else if (IsPrime(n))
{
return null;
}
else
{
for (int i = 2; i < n; i++)
if (n % i == 0)
divisors.Add(i);
}
return divisors.ToArray();
}
}
namespace Solution
{
using NUnit.Framework;
using System;
[TestFixture]
public class SolutionTest
{
[Test]
public void SampleTest()
{
Assert.AreEqual(new int[] {3, 5}, Divisors.Divisors(15));
Assert.AreEqual(new int[] {2, 4, 8}, Divisors.Divisors(16));
Assert.AreEqual(new int[] {11, 23}, Divisors.Divisors(253));
Assert.AreEqual(new int[] {2, 3, 4, 6, 8, 12}, Divisors.Divisors(24));
}
}
}