使用C#的yield生成素数
这里有个问题:某一年是某个著名数学家的第n个生日,那一年份又正好是第 n +1 个素数。这是哪一年?这个数学家是谁?n又是多少?
解不出来,不过因此知道了C#中yield的用法:
上代码:
using System;
using System.Collections.Generic;
namespace PrimeAge
{
class Prime
{
private long begin = 2;
private long next = 2;
public IEnumerable<long> GeneratePrime()
{
yield return 2;
while (true)
{
bool flag = false;
next++;
for (long i = begin; i <= Math.Sqrt(next); i++)
{
if (next % i == 0)
{
flag = true;
break;
}
}
if (!flag)
{
yield return next;
}
}
}
}
}
调用:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PrimeAge
{
class Program
{
static void Main(string[] args)
{
Prime p = new Prime();
IEnumerator<long> iter = p.GeneratePrime().GetEnumerator();
iter.MoveNext();
List<long> list = new List<long>();
for (int i = 0; i < 100;i++ )
{
Console.Write(iter.Current+" ");
iter.MoveNext();
}
}
}
}