title: Unfriendly Numbers from Interviewstreet.com
body: <p>The problem is as follows:</p>
  
  <pre class="lang-none prettyprint-override"><code>There is one friendly number and N unfriendly numbers. We want to find how many numbers are there which exactly divide the friendly number, but does not divide any of the unfriendly numbers.
  
  Input Format:
  The first line of input contains two numbers N and K seperated by spaces. N is the number of unfriendly numbers, K is the friendly number.
  The second line of input contains N space separated unfriendly numbers.
  
  Output Format:
  Output the answer in a single line.
  
  Constraints:
  1 &lt;= N &lt;= 10^6
  1 &lt;= K &lt;= 10^13
  1 &lt;= unfriendly numbers &lt;= 10^18
  
  Sample Input:
  8 16
  2 5 7 4 3 8 3 18
  
  Sample Output:
  1
  
  Explanation :
  Divisors of the given friendly number 16, are { 1, 2, 4, 8, 16 } and the unfriendly numbers are {2, 5, 7, 4, 3, 8, 3, 18}. Now 1 divides all unfriendly numbers, 2 divide 2, 4 divide 4, 8 divide 8 but 16 divides none of them. So only one number exists which divide the friendly number but does not divide any of the unfriendly numbers. So the answer is 1.   
  </code></pre>
  
  <p>Following is my C# solution:</p>
  
  <pre><code>class Solution
  {
      static void Main(string[] args)
      {
          string firstLine = Console.ReadLine();
          string[] firstLineItems = firstLine.Split(' ');
  
          ulong friendlyNum = Convert.ToUInt64(firstLineItems[1]);
          int noOfunf = Convert.ToInt32(firstLineItems[0]);
  
          string secondLine = Console.ReadLine();
          string[] secondLineItems = secondLine.Split(' ');
  
          List&lt;ulong&gt; unfriendlyNumbersArray = new List&lt;ulong&gt;(noOfunf);
  
          foreach (string str in secondLineItems)
          {
              unfriendlyNumbersArray.Add(Convert.ToUInt64(str));
          }
  
          List&lt;ulong&gt; divisors = CalculateDivisors(friendlyNum);
  
          Console.WriteLine(finalCall(divisors, unfriendlyNumbersArray));
      }
  
      private static List&lt;ulong&gt; CalculateDivisors(ulong number)
      {
          List&lt;ulong&gt; factors = new List&lt;ulong&gt;();
  
          for (ulong factor = 1; factor * factor &lt;= number; ++factor)
          {
              if (number % factor == 0)
              {
                  factors.Add(factor);
                  if (factor * factor != number)
                  {
                      factors.Add(number / factor);
                  }
              }
          }
          return factors;
      }
  
      private static long finalCall(List&lt;ulong&gt; divisors, List&lt;ulong&gt; unfriendlyNumbersArray)
      {
          long output = 0;
          var unfriendlyNumbers = (from i in unfriendlyNumbersArray select i).Distinct();
  
          foreach (ulong divisor in divisors)
          {
              var test = unfriendlyNumbers.Where(number =&gt; number % divisor == 0).ToList();
              output += (test.Count == 0) ? 1 : 0;
          }
          return output;
      }
  }
  </code></pre>
  
  <p>Only first 3 test cases pass. 4th one is killed, 5th and 6th one gives me parsing exception for string. </p>
  
  <p>Exception for 5th and 6th ones:</p>
  
  <pre><code>Unhandled Exception: System.FormatException: Input string was not in the correct format
      at System.UInt64.Parse (System.String s) [0x00000] in :0 
      at System.Convert.ToUInt64 (System.String value) [0x00000] in :0 
      at Solution.Main (System.String[] args) [0x00000] in :0 
      [ERROR] FATAL UNHANDLED EXCEPTION: System.FormatException: Input string was not in the     correct format
      at System.UInt64.Parse (System.String s) [0x00000] in :0 
      at System.Convert.ToUInt64 (System.String value) [0x00000] in :0 
      at Solution.Main (System.String[] args) [0x00000] in :0
  </code></pre>