关于前期C#基础的学习
在第六章中的哥德巴赫猜想的问题中:
要求:输入一个大于0的偶数,然后计算出该数由那两个质数相加所得?
1~自己的方法是计算出该偶数内所有的质数,并且存到集合中(因为集合不限长)分别依次相加若等于该质数则输出:
static void Main(string[] args)
{
Console.Write("请输入一个大于0的偶数");
int n = int.Parse(Console.ReadLine());
if (n > 0 && n % 2 == 0)
{
#region 找出该数范围内的质数
List<int> tuple = new List<int>();
for (int i = 2; i < n - 1; i++)
{
bool isFind = false;
for (int j = 2; j < i - 1; j++)
{
if (i % j == 0)
{
isFind = true;
break;
}
}
if (!isFind) {
tuple.Add(i);
}
}
#endregion
#region 找出数字进行加法
for (int i = 0; i < tuple.Count;i++ ) {
for (int j = i + 1; j < tuple.Count; j++) {
if (tuple[i] + tuple[j] == n) {
Console.Write(n+"="+tuple[i]+"+"+tuple[j]);
Console.ReadLine();
}
}
}
#endregion
}
else
{
Console.Write("输入错误,请重新输入");
}
Console.Clear();
}
大家也许发现了,这样的方法,极其浪费内存,效率很低,但是,这样的方法可以找出更多的结果(虽然目前看起来没什么用)
2~关于老师的方法,输入偶数为n,n=i+j;j=n-i;先判断i是否为质数,再判断j是否为质数,如果同时成立,那么i和j就是所找的数,下面看代码
Console.Write("请输入一个大于0的偶数");
int n = int.Parse(Console.ReadLine());
int i, j = 0;
for (i = 2; i < n - 2; i++) {
j = n - i;
//先判断i是不是质数
#region 判断i
bool isFind = false;
for (int a = 2; a < i; a++) {
if (i%a==0)
{
isFind = true;
break;
}
}
if (isFind)
{
continue;
}
#endregion
#region 判断j
// 判断j是不是质数
isFind = false;
for (int a = 2; a < j; a++)
{
if (j%a==0)
{
isFind = true;
break;
}
}
if (!isFind)
{
break;
}
#endregion
}
Console.Write(n+"="+i+"+"+j);
的确,老师的这种方法更高级,更需要逻辑思维能力,同时要注意一个问题,老师代码中红色部分是一定要注意的,如果直接给j=n-i,会有问题,因为无法判断j具体的值,则会报错.

浙公网安备 33010602011771号