昨晚我问了这个问题.. this link 和成员回答我(谢谢) 我有另一种方法让我觉得我有问题..
我会放两种方法..第二种是我要问的..
public static bool ISprime(int prime)
{
if (prime < 2 )
return false;
else if (prime == 2)
return true;
else
{
for (int i = 2; i < prime; i++)
{
if (prime % i == 0)
return false;
}
return true;
}
}
// second method
public static int[] GeneratePrimes(int[] n)
{
int[] array = new int[n.Length];
int PrimeLength =0;
for (int i = 0; i < n.Length; i++)
{
if (ISprime(array[i]))
PrimeLength++;
}
int[] arprime = new int[PrimeLength];
for (int i = 0, j=0; i< PrimeLength; i++)
{
if (ISprime(i))
arprime[j++] = i;
}
return arprime;
}
Console.ReadLine()
谢谢
答案 0 :(得分:0)
不确定您的方法是否有效,但回答问题的第二部分:
string s = Console.ReadLine();
int n = Convert.ToInt32(s);
int[] arprimes = GeneratePrimes(n);
可能最好将转换位置于试验中,因为用户可以输入不是数字的内容。
编辑:实际上,我会将方法更改为GeneratePrimes(int n)而不是GeneratePrimes(int [] n) - 您不需要传递数字数组,只需传递数字,因为它返回一个数组。 / p>
另一个编辑:这里更改了您的方法,以便传递int而不是int数组。仍然不确定该方法是否会实际工作。
public static int[] GeneratePrimes(int n)
{
int[] array = new int[n];
int PrimeLength =0;
for (int i = 0; i < n; i++)
{
if (ISprime(array[i]))
PrimeLength++;
}
int[] arprime = new int[PrimeLength];
for (int i = 0, j=0; i< PrimeLength; i++)
{
if (ISprime(i))
arprime[j++] = i;
}
return arprime;
}
以下是您想要的主要方法
public static void Main(I cannot remember what goes here!)
{
string s = Console.ReadLine();
int n = Convert.ToInt32(s);
int[] arprimes = GeneratePrimes(n);
string output = "";
for (i=0; i<arprimes.Length;i++)
{
output += arprimes[i].ToString() + ", ";
}
output = output.Remove(output.Length - 3, 2);
Console.WriteLine(output);
}
答案 1 :(得分:0)
如果你需要从1到n的所有素数,你需要有这样的东西:
int[] GeneratePrimes(int n)
{
List<int> primes = new List<int>();
for (int i=1; i<=n i++)
{
if (IsPrime(i))
{
primes.Add(i);
}
}
return primes.ToArray();
}
但是这个算法并没有效果。见:http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes还有另一种筛子,更有效。
更新。如果您需要前n个素数,那么您需要执行以下操作:
int[] GeneratePrimes(int n)
{
List<int> primes = new List<int>();
while (primes.Length < n)
{
if (IsPrime(i))
{
primes.Add(i);
}
}
return primes.ToArray();
}
答案 2 :(得分:0)
要回答你的第一个问题,我的理解是GeneratePrimes()
将返回一个数组,该数组只有作为参数提供的数组中的素数。
您的方法无效,因为if (ISprime(array[i]))
将始终失败,因为“array
”未分配任何值。您必须改为使用if (ISprime(n[i]))
。
但是,您也可以避免两个循环执行相同的任务。以下代码可能会对您有所帮助:
public static int[] GeneratePrimes(int[] n)
{
List<int> primeList = new List<int>();
for (int i=0; i<n.Length; i++)
{
if(isprime(n[i]))
primeList.Add(n[i]);
}
return primeList.ToArray();
}
答案 3 :(得分:0)
enter code here
public static int[] GeneratePrimes(int[] n)
{
int[] array = new int[n.Length];
int[] arprime = new int[n.Length];
int PrimeLength =0;
int j=0;
for (int i = 0; i < n.Length; i++)
{ if (ISprime(array[i]))
{
PrimeLength++;
arprime[j++]=array[i];
}
}
Array.Resize(ref arprime, PrimeLength);
return arprime;
}
答案2:
在命名空间中包含该程序集
AssemblyName.ClassName.MethodName(Int.Parse(到Console.ReadLine())); //用于传递整数数据otherwize不要强制转换