2014-02-20 26 views
-3

我试图确定一个数是否为素数或不使用循环。 以下是我到目前为止。我的争吵是,我不知道这是否会涵盖所有可能的输入值。获取没有循环的素数

bool isPrime(int Value) 
{ 
    if ((Value % 2 == 0) || (Value % 3 == 0) || (Value % 5 == 0) || (Value % 7 == 0)) 
     return false; 
    else 
     return true; 
} 
+0

将无法​​正常工作对于11 –

+0

您可以尝试生成一个[prime sieve](http://en.wikipedia.org/wiki/Generating_primes)然后探究它,但我认为生成sieve本身会违反您的非循环要求。 – LB2

+5

确实为11-工作 - 将返回true,因为这些数字都不会分成11. –

回答

1

这绝对不会涵盖素数的全部范围。您目前正在检查您的输入是否除以4个素数。为了确保你的数字是素数,它必须不能被任何其他素数整除(13,17,23等)。循环的另一个更糟糕的选择是递归,但我没有理由认为你应该使用后者。

You can use this method

+1

呃,这些例子使用循环,并且提问者问如何在没有循环的情况下做到这一点 – Sean

+0

你是对的。但是这样的事情是不可能的,除非你在你的if语句中硬编码每个素数或者用递归进行。 –

+0

@NikolayPetkov对不起,但Euclid证明这是不可能的。你知道......就像在2000多年前。你没有收到备忘录吗? – Aron

1

如果你可以定义可能的输入的东西的范围,说非零整数低于100,则这样的事情可能是最简单的解决方案

int[] primes = new int[] { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97 } ; 

bool isPrime(int Value) 
{ 
    return primes.Contains(Value); 
} 
+1

你应该把它放在一个'HashSet'中...你知道...只是因为... – Aron

+0

@Aron:真的够了。可能与<100没有多大区别,但是随着你的体型变大,它可能会更好。 –

+0

我敢肯定,这使用循环(尽管,在执行'隐藏的视图。包含') – spender