using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Diagnostics;
namespace PrimeNnmber
{
class Program
{
public static bool SerialPrimeNumber(uint n)
{
if (n < 4)
{
return true;
}
int root = (int)Math.Sqrt(n) + 1;
for (int i = 2; i < root; i++ )
{
Thread.Sleep(10);
if (n % i == 0)
{
return false;
}
}
return true;
}
public static bool ParallelPrimeNumber(uint n)
{
if (n < 4)
{
return true;
}
int root = (int)Math.Sqrt(n) + 1;
bool isPrime = true;
Parallel.For(2, root, (i, state) =>
{
Thread.Sleep(10);
if (n % i == 0)
{
isPrime = false;
state.Stop();
}
});
return isPrime;
}
static void Main(string[] args)
{
uint n = 100;
Console.WriteLine("串行计算0到{0}之间的素数:", n);
Stopwatch watch = Stopwatch.StartNew();
for (uint i = 0; i < n; i++ )
{
if (SerialPrimeNumber(i))
{
Console.Write("{0}\t", i);
}
}
Console.WriteLine("\n串行for循环运行时长:{0}毫秒。\n\n", watch.ElapsedMilliseconds);
watch.Restart();
Parallel.For(0, n, (i) =>
{
if (ParallelPrimeNumber((uint)i))
{
Console.Write("{0}\t", i);
}
});
Console.WriteLine("\n并行for循环运行时长:{0}毫秒。", watch.ElapsedMilliseconds);
}
}
}