Я имею в виду тест на простоту, реализованный в модели CRCW PRAM
. Вот что мне удалось:
n // input number
result = n > 1;
for i=2...sqrt(n); i+=6
{
do parallel
{
if (((n<=3) and (n<=1)) || (((n%2==0) or (n%3==0))))
{
result = false;
}
else if ((n % i == 0) or (n%(i+2)) == 0)
{
result = false;
}
}
}
Причина result = n > 1;
состоит в том, чтобы предотвратить проверку отрицательного числа. for
цикл делает работу покоя.
Мои вопросы:
Я знаю, что в модели CRCW PRAM
мне нужно записать одно и то же значение в ячейку памяти. Но имеет ли значение, если часть кода не параллельна? Я имею в виду n > 1;
может быть true
или false
. Отклоняет ли это мое решение?
Можно ли использовать +=6
для цикла?