mirror of
https://bitbucket.org/Mattrixwv/csclasses.git
synced 2025-12-06 18:23:58 -05:00
Added GetDivisors function
This commit is contained in:
@@ -460,6 +460,109 @@ namespace mee{
|
|||||||
primes.Sort();
|
primes.Sort();
|
||||||
return primes;
|
return primes;
|
||||||
}
|
}
|
||||||
|
//These functions return all the divisors of goalNumber
|
||||||
|
public static List<int> GetDivisors(int goalNumber){
|
||||||
|
List<int> divisors = new List<int>();
|
||||||
|
//Start by checking that ht enumber is positive
|
||||||
|
if(goalNumber <= 0){
|
||||||
|
return divisors;
|
||||||
|
}
|
||||||
|
//If the number is 1 return just itself
|
||||||
|
else if(goalNumber == 1){
|
||||||
|
divisors.Add(1);
|
||||||
|
return divisors;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Start at 3 and loop through all numbers < sqrt(goalNumber) looking for a number that divides it evenly
|
||||||
|
double topPossibleDivisor = Math.Ceiling(Math.Sqrt(goalNumber));
|
||||||
|
for(int possibleDivisor = 1;possibleDivisor <= topPossibleDivisor;++possibleDivisor){
|
||||||
|
//If you find one add it and the number it creates to the list
|
||||||
|
if((goalNumber % possibleDivisor) == 0){
|
||||||
|
divisors.Add(possibleDivisor);
|
||||||
|
//Account for the pssibility of sqrt(goalNumber) being a divisor
|
||||||
|
if(possibleDivisor != topPossibleDivisor){
|
||||||
|
divisors.Add(goalNumber / possibleDivisor);
|
||||||
|
}
|
||||||
|
//Take care of a few occations where a number was added twice
|
||||||
|
if(divisors[divisors.Count - 1] == (possibleDivisor + 1)){
|
||||||
|
++possibleDivisor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Sort the list before returning it for neatness
|
||||||
|
divisors.Sort();
|
||||||
|
//Return the list
|
||||||
|
return divisors;
|
||||||
|
}
|
||||||
|
public static List<long> GetDivisors(long goalNumber){
|
||||||
|
List<long> divisors = new List<long>();
|
||||||
|
//Start by checking that ht enumber is positive
|
||||||
|
if(goalNumber <= 0){
|
||||||
|
return divisors;
|
||||||
|
}
|
||||||
|
//If the number is 1 return just itself
|
||||||
|
else if(goalNumber == 1){
|
||||||
|
divisors.Add(1);
|
||||||
|
return divisors;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Start at 3 and loop through all numbers < sqrt(goalNumber) looking for a number that divides it evenly
|
||||||
|
double topPossibleDivisor = Math.Ceiling(Math.Sqrt(goalNumber));
|
||||||
|
for(long possibleDivisor = 1;possibleDivisor <= topPossibleDivisor;++possibleDivisor){
|
||||||
|
//If you find one add it and the number it creates to the list
|
||||||
|
if((goalNumber % possibleDivisor) == 0){
|
||||||
|
divisors.Add(possibleDivisor);
|
||||||
|
//Account for the pssibility of sqrt(goalNumber) being a divisor
|
||||||
|
if(possibleDivisor != topPossibleDivisor){
|
||||||
|
divisors.Add(goalNumber / possibleDivisor);
|
||||||
|
}
|
||||||
|
//Take care of a few occations where a number was added twice
|
||||||
|
if(divisors[divisors.Count - 1] == (possibleDivisor + 1)){
|
||||||
|
++possibleDivisor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Sort the list before returning it for neatness
|
||||||
|
divisors.Sort();
|
||||||
|
//Return the list
|
||||||
|
return divisors;
|
||||||
|
}
|
||||||
|
public static List<BigInteger> GetDivisors(BigInteger goalNumber){
|
||||||
|
List<BigInteger> divisors = new List<BigInteger>();
|
||||||
|
//Start by checking that ht enumber is positive
|
||||||
|
if(goalNumber <= 0){
|
||||||
|
return divisors;
|
||||||
|
}
|
||||||
|
//If the number is 1 return just itself
|
||||||
|
else if(goalNumber == 1){
|
||||||
|
divisors.Add(1);
|
||||||
|
return divisors;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Start at 3 and loop through all numbers < sqrt(goalNumber) looking for a number that divides it evenly
|
||||||
|
double topPossibleDivisor = Math.Exp(BigInteger.Log(goalNumber) / 2);
|
||||||
|
for(long possibleDivisor = 1;possibleDivisor <= topPossibleDivisor;++possibleDivisor){
|
||||||
|
//If you find one add it and the number it creates to the list
|
||||||
|
if((goalNumber % possibleDivisor) == 0){
|
||||||
|
divisors.Add(possibleDivisor);
|
||||||
|
//Account for the pssibility of sqrt(goalNumber) being a divisor
|
||||||
|
if(possibleDivisor != topPossibleDivisor){
|
||||||
|
divisors.Add(goalNumber / possibleDivisor);
|
||||||
|
}
|
||||||
|
//Take care of a few occations where a number was added twice
|
||||||
|
if(divisors[divisors.Count - 1] == (possibleDivisor + 1)){
|
||||||
|
++possibleDivisor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Sort the list before returning it for neatness
|
||||||
|
divisors.Sort();
|
||||||
|
//Return the list
|
||||||
|
return divisors;
|
||||||
|
}
|
||||||
//These functions get a value from combining elements in an array
|
//These functions get a value from combining elements in an array
|
||||||
public static int GetSum(List<int> ary){
|
public static int GetSum(List<int> ary){
|
||||||
return ary.Sum();
|
return ary.Sum();
|
||||||
|
|||||||
Reference in New Issue
Block a user