Advertisement
Guest User

Untitled

a guest
Mar 29th, 2015
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.92 KB | None | 0 0
  1. public class Program
  2. {
  3.  
  4. private static void Main(string[] args)
  5. {
  6. ParallelFactorial factorial = new ParallelFactorial();
  7.  
  8. for (int i = 4; i <= 100; i++)
  9. {
  10. Console.WriteLine(factorial.ComputeFactorial(i).Result);
  11. }
  12. }
  13. }
  14.  
  15. public class ParallelFactorial
  16. {
  17. public async Task<BigInteger> ComputeFactorial(int n)
  18. {
  19. int processorCount = Environment.ProcessorCount * 2;
  20.  
  21. int delta = n / processorCount;
  22. List<Task<BigInteger>> tasks = new List<Task<BigInteger>>();
  23. for (int i = 1; i <= n; i += delta)
  24. {
  25. int from = i;
  26. int to = i + delta - 1;
  27. tasks.Add(Task.Run(() =>
  28. {
  29. BigInteger val = 1;
  30. for (int k = from; k <= to; k++) val *= k;
  31. return val;
  32. }));
  33. }
  34.  
  35. return (await Task.WhenAll(tasks)).Aggregate((x, y) => x * y);
  36. }
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement