此应用程序将收到一个数字“n”。在收到这个数字后,程序必须在素数列表中显示第n个素数。例如,如果用户输入“3”,程序应显示“5”,因为5是从2开始的第三个素数。我知道我的代码出了问题,但我不知道问题出在哪里以及如何解决它。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Determinar el n-esimo primo.");
long n = Convert.ToInt64(Console.ReadLine()); // N lugar de primos
long[] array = new long[n];
long c=0;
while (c >= 2)
{
if(siprimo(c++) == true)
for (long i = 0; i < n; i++)
{
array[i] = c;
}
}
Console.WriteLine(array[n - 1]);
Console.ReadLine();
}
static private bool siprimo(long x)
{
bool sp = true;
for (long k = 2; k <= x / 2; k++)
if (x % k == 0)
sp = false;
return sp;
}
}
}
答案 0 :(得分:2)
这看起来像是家庭作业,我不打算为你做功课。但是我会告诉你,如果你只是通过程序步骤(在Visual Studio中使用F10),那么问题就很容易找到。
提示:c什么时候会增加?
答案 1 :(得分:2)
要问自己的其他一些问题:
while (c >= 2)
代码块中循环了多少次?答案 2 :(得分:0)
更像是:
int GetAnswer(int nprime) {
if (nprime == 1) return 2;
if (nprime == 2) return 3;
int j;
int n = 2;
int i = 5;
while (n < nprime) {
int isprime = 1;
double r = Math.Sqrt(i);
for(j = 3; j <= r; j+=2)
if((i%j) == 0) {
isprime = 0;
break;
}
n+=isprime;
i+=2;
}
return i;
}
在你的程序中,你犯了一些错误:
long c=0;
while (c >= 2)
C永远不会大于2,因此代码永远不会被执行。