Skip to content

Instantly share code, notes, and snippets.

@tomaszbartoszewski
Last active April 26, 2017 20:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tomaszbartoszewski/7b0f90a71374d2a22c5031ab82c9185c to your computer and use it in GitHub Desktop.
Save tomaszbartoszewski/7b0f90a71374d2a22c5031ab82c9185c to your computer and use it in GitHub Desktop.
public class Semiprime
{
static public bool Semiprime1(int number)
{
var divisors = new List<int>();
for (var i = 2; i <= Math.Sqrt(number); i++)
{
if (number % i == 0)
{
divisors.Add(i);
divisors.Add(number / i);
}
}
return divisors.Count == 2 && divisors.All(IsPrime);
}
static public bool Semiprime2(int number)
{
var hadTwoDivisors = false;
for (var i = 2; i <= Math.Sqrt(number); i++)
{
if (number % i == 0)
{
if (hadTwoDivisors || !IsPrime(i) || !IsPrime(number / i))
return false;
hadTwoDivisors = true;
}
}
return hadTwoDivisors;
}
static public bool Semiprime3(int number)
{
var divisors = GetDivisors(number).ToArray();
return divisors.Count() == 2 && divisors.All(IsPrime);
}
static public IEnumerable<int> GetDivisors(int number)
{
for (var i = 2; i <= Math.Sqrt(number); i++)
{
if (number % i == 0)
{
yield return i;
yield return number / i;
}
}
}
private static bool IsPrime(int number)
{
if (number == 1)
return false;
for (var i = 2; i <= Math.Sqrt(number); i++)
{
if (number % i == 0)
return false;
}
return true;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment