Advertisement
Guest User

Euler 21

a guest
Dec 15th, 2014
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.96 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace Project_Euler_Problem_21
  7. {
  8.     class Program
  9.     {
  10.         static void Main()
  11.         {
  12.             int input = 0;
  13.             do
  14.             {
  15.                 Console.Write("Max Value: ");
  16.             } while (!int.TryParse(Console.ReadLine(), out input));
  17.  
  18.             Program MainProgram = new Program();
  19.  
  20.             int sum = MainProgram.FindAmicableSum(input);
  21.  
  22.             Console.WriteLine("\n" + sum);
  23.             Console.ReadLine();
  24.         }
  25.  
  26.         public int FindAmicableSum(int maxValue)
  27.         {
  28.             Number[] numberArray = new Number[maxValue + 1];
  29.  
  30.             for (int i = 0; i <= maxValue; i++)
  31.             {
  32.                 numberArray[i] = new Number(i);
  33.             }
  34.  
  35.             return numberArray.Select(x => x.Amicable == true ? x.Value : 0).Sum();
  36.         }
  37.  
  38.     }
  39.  
  40.     public class Number
  41.     {
  42.         public Number(int value)
  43.         {
  44.             this.Value = value;
  45.             DivisorSum = FindDivisorSum(value, 100);
  46.             TestAmicablity();
  47.         }
  48.        
  49.         public readonly int Value;
  50.         public int DivisorSum { get; private set; }
  51.         public bool Amicable { get; set; }
  52.  
  53.         private static int FindDivisorSum(int n, int tolerance)
  54.         {
  55.             List<int> divisorList = FindDivisors(n, tolerance);
  56.             return divisorList.Sum();
  57.         }
  58.  
  59.         private static List<int> FindDivisors(int n, int tolerance)
  60.         {
  61.             List<int> divisorList = new List<int>();
  62.  
  63.             for (int i = 1; i < n; i++)
  64.             {
  65.                 if (n % i == 0)
  66.                 {
  67.                     divisorList.Add(i);
  68.                 }
  69.             }
  70.             return divisorList;
  71.         }
  72.  
  73.         private void TestAmicablity()
  74.         {
  75.             Amicable = (Value == FindDivisorSum(DivisorSum, 100) && Value != DivisorSum);
  76.         }
  77.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement