суммировать первые n простых обратных, так что сумма превышает k (Matlab) - PullRequest
2 голосов
/ 16 ноября 2011

Я пытаюсь написать программу на языке matlab, такую, чтобы сумма обратных значений n первых простых чисел превышала заданное значение k.Чтобы прояснить, я пытаюсь сделать функцию

SumPrime (k)

И она должна вернуть целое число n такое, что

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

суммаиз простых чисел и их взаимных и сюжет в 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 Ответ

1 голос
/ 16 ноября 2011

Вот как предварительно вычислить суммы, а затем найти первое, которое превышает порог:

...