因为要计算多个偶数,所以建议先将10000之内的所有素数存储到素数集合中,然后排序从素数中取出一个素数,用给定的数据相差,如果结果也就该素数集合中,那么可以停止循环写入该值。如果未找到则进行错误处理(根据哥德巴赫猜,不可能没有大于6偶数不能表示成素数之和,所以不用处理)。
public ListGetAllPrime(int num)
{
// 存储小于num的所有素数
Listrslt = new List ();
// 插入前两个素数
rslt.Add(2);
rslt.Add(3);
// 进行循环
for(int i=5;i<= num; i++)
{
bool isPrime = true;
for(int index=0,end=Math.Sqrt(i);rslt[index]<=end;index++)
if(num%rslt[index]==0)
{
isPrime=false;
break;
}
if(isPrime)
rslt.Add(num);
}
return rslt;
}
/* *****************************************************************************
* Describe:
* 判断一个素数是否素数只须拿该数开方内的所有素数相除就行了。比如一个数若除2无余
* 数,则一定不是素数,相反若除2有余数,则除4,6,8一定也有余数,所以不需要再试
* 同理,测试3后,不必再测试3的倍数,从这里理论上来说,只须要除于它的素数即可。
* 最后判断内循环结束时判断是否素数,若是加入即可!
* *****************************************************************************/
给定一个偶数,然后进行判断即可。
private ListPrimeArray;
public int GetPairPrimes(int num)
{
int rslt =0;
for(int i=0;i{
rslt = PrimeArray[i]; //这个肯定是素数,不用想了
if(PrimeArray.Contains(num-rslt))
break;
}
return rslt;
}
// rslt是较小的那个素数,而num-rslt是较大的那个素数。因为哥德巴赫猜想,所以我们不必要再判断是否存在及其他问题了。
以上两个方法均没有对不符合数据进行判断,所以使用前可以先判断或者进行修改以上两个方法以实现不符合数据的处理。
这样你可以循环着读取文件的行,然后再调用这个方法可以求出。
static void Main(string[] args)
{
TT:
string input = Console.ReadLine();
int kk = int.Parse(input);
if (kk > 0)
{
for (int i = 2; i < kk / 2; i++)
{
if (i==11)
{
}
if (i % 2 != 0 && i % 3 != 0 && i % 5 != 0)
{
if ((kk - i) % 2 != 0 && (kk - i) % 3 != 0 && (kk - i) % 5!= 0)
{
Console.WriteLine("素数:" + i.ToString() + " " + (kk - i).ToString());
}
}
}
}
goto TT;
}
不是问者所求的完整C#代码