MATLAB - 如何找到满足此条件的无限集的第一个整数?

MATLAB - How do I find the first integer of an infinite set that satisfies this condition?

我想找到最小的整数P,使得集合{1,2,..., P}中的素数个数小于P/6

我想通过(长时间的)反复试验得到答案,但想知道如何通过 MATLAB 验证这一点。

您可以使用 isprime 来检查数组中的任何值是否为素数。如果我们想检查所有整数直到整数 N 我们可以做

% 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);

要确定给定整数 N 之前出现了多少个素数,我们可以使用此逻辑矩阵的 cumsum(累积和)

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);

然后我们可以识别第一次出现 find

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