Advertisement
yahorrr

Untitled

Apr 24th, 2022
1,041
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.18 KB | None | 0 0
  1. using System;
  2.  
  3. namespace PrimeFactorsTask
  4. {
  5.     public static class PrimeFactors
  6.     {
  7.         /// <summary>
  8.         /// Compute the prime factors of a given natural number.
  9.         /// A prime number is only evenly divisible by itself and 1.
  10.         /// Note that 1 is not a prime number.
  11.         /// </summary>
  12.         /// <param name="number">Source number.</param>
  13.         /// <returns>Prime factors of a given natural number.</returns>
  14.         /// <exception cref="ArgumentException">Thrown when number less or equal 0.</exception>
  15.         /// <example>
  16.         /// 60 => {2, 2, 3, 5}
  17.         /// 8 => {2, 2, 2}
  18.         /// 12 => {2, 2, 3}
  19.         /// 901255 => {5, 17, 23, 461}
  20.         /// 93819012551 => {11, 9539, 894119}
  21.         /// </example>
  22.         public static int[] GetFactors(int number)
  23.         {
  24.             if (number <= 0)
  25.             {
  26.                 throw new ArgumentException("Argument out of range", nameof(number));
  27.             }
  28.  
  29.             int numberOfDividers = 0;
  30.             int[] dividers = new int[numberOfDividers];
  31.             while (number != 1)
  32.             {
  33.                 for (int i = 2; i <= number; i++)
  34.                 {
  35.                     if (number % i == 0 && IsPrime(i))
  36.                     {
  37.                         int[] copy = dividers;
  38.                         numberOfDividers++;
  39.                         dividers = new int[numberOfDividers];
  40.                         Array.Copy(copy, 0, dividers, 0, numberOfDividers - 1);
  41.                         dividers[numberOfDividers - 1] = i;
  42.                         number /= i;
  43.                         break;
  44.                     }
  45.                 }
  46.             }
  47.  
  48.             return dividers;
  49.         }
  50.  
  51.         private static bool IsPrime(int number)
  52.         {
  53.             if (number == 0 || number == 1)
  54.             {
  55.                 return false;
  56.             }
  57.             else
  58.             {
  59.                 for (int i = 2; i <= number / 2; i++)
  60.                 {
  61.                     if (number % i == 0)
  62.                     {
  63.                         return false;
  64.                     }
  65.                 }
  66.             }
  67.  
  68.             return true;
  69.         }
  70.     }
  71. }
  72.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement