我试图在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
答案 0 :(得分:1)
以下是如何预先计算总和然后找到超过阈值的第一个:
>> p = primes(1000);
>> cs = cumsum(1./p);
>> find(cs > 1.8, 1)
ans = 25