总和前n个素数倒数,使得总和超过k(Matlab)

时间:2011-11-16 02:10:29

标签: matlab primes

我试图在matlab中编写程序,使得n个第一素数的倒数之和超过给定值k。要澄清,我正在尝试创建一个函数

SumPrime(k)的

它应该返回一个整数n,以便

\sum_{i=1}^{n} 1/p_i > k

sum of primes and reciprocals of them and plot in matlab?

我试着看这里,但这并没有完全回答我的问题。命令

也没有
sumInversePrimes = sum(1./primes(n));

这是我的尝试。首先,我定义一个函数来查找第n个素数。

function Y = NthPrime(n)

if n==1
    Y = 2;
    return
end

if n < 1 || round(n)~=n
    return
end

j = 2;
u = 0;

while u < n

    T = primes(j);
    u = numel(T);
    j = 1 + j;

end

Y = T(numel(T));

在执行了这个(冗长的?)代码以找到第n个素数后,剩下的就是一个小蛋糕。

function Y = E(u)

sum = 0
n = 0

while sum < u

    n = n + 1

    sum = sum + 1/( NthPrime(n) )

end

Y = n;

返回正确的值。这有点奏效。唉它很慢,我想这是非常糟糕的代码。我刚刚开始在matlab中学习编码,有人可以帮我写一个更好的代码或优化我的吗?

XOXOXOX

Nebby

1 个答案:

答案 0 :(得分:1)

以下是如何预先计算总和然后找到超过阈值的第一个:

 >> p = primes(1000);
 >> cs = cumsum(1./p);
 >> find(cs > 1.8, 1)
 ans =  25