2017-01-13 7 views
1

最小の整数Pを見つけて、{1,2,..., P}の素数の数がP/6より少なくなるようにしたいと考えています。MATLAB - この条件を満たす無限集合の最初の整数を見つけるにはどうすればよいですか?

私は(長い)試行錯誤を通じて答えがあると思いますが、MATLABを通じてこれを確認する方法を知りたいと思います。

+0

で最初のoccuranceを識​​別することができます:{1}は何の素数と0が含まれていないので、P> 1、<1/6 。 – rossum

+0

私はそれを置いた、変更されている必要があります。 –

答えて

2

isprimeを使用すると、配列内の値が素数であるかどうかを確認できます。私たちは、整数Nまでのすべての整数を確認したい場合は、私たちは、与えられた整数Nまで発生しているどのように多くの素数私たちは、この論理行列のcumsum(累計)

を使用することができるかを決定するために

% You can change this to the maximum number that you'd like to consider for P 
N = 2000; 

possible_P_values = 2:N;    % We omit 1 here since it's not a prime number 
primes = isprime(possible_P_values); 

を行うことができます

nPrimes_less_than_or_equal_to_P = cumsum(primes); 

次に、possible_P_valuesを6で割って、ある点までの素数がその数より少ないかどうかを調べることができます。

is_less_than_P_over_6 = nPrimes_less_than_or_equal_to_P < (possible_P_values ./ 6); 

はその後、我々は、私はあなたが最初のPを探していることを前提としていfind

possible_P_values(find(is_less_than_P_over_6, 1, 'first')) 
% 1081 
+0

優れています。非常に役立ち、明確に説明されています - ありがとうございます! –