Я выкладывал ранее код проверки на простоту с использованием свойств 30-ки:
int Prime(quint64 a)
{
quint64 i1, i2, i3, i4, i5, i6, i7, i8, bound;
if (a == 0 || a == 1) return 0;
if (a == 2 || a == 3 || a == 5 || a == 7 || a == 11 || a == 13 || a == 17
|| a == 19 || a == 23 || a == 29) return 1;
if (a%2 == 0 || a%3 == 0 || a%5 == 0 || a%7 == 0 || a%11 == 0 ||
a%13 == 0 || a%17 == 0 || a%19 == 0 || a%23 == 0 || a%29 == 0)
return 0;
bound = sqrt((double)a);
i1 = 31; i2 = 37; i3 = 41; i4 = 43; i5 = 47; i6 = 49; i7 = 53; i8 = 59;
while(i8 <= bound && a%i1 && a%i2 && a%i3 && a%i4 && a%i5 && a%i6 && a%i7 && a%i8)
{
i1 += 30; i2 += 30; i3 += 30; i4 += 30; i5 += 30; i6 += 30; i7 += 30; i8 += 30;
}
if( i8 <= bound ||
(i1 <= bound && a % i1 == 0) ||
(i2 <= bound && a % i2 == 0) ||
(i3 <= bound && a % i3 == 0) ||
(i4 <= bound && a % i4 == 0) ||
(i5 <= bound && a % i5 == 0) ||
(i6 <= bound && a % i6 == 0) ||
(i7 <= bound && a % i7 == 0) ) return 0;
return 1;
}
Он работает на 2 секунды быстрее, т.е. находит максимальное простое число за 10 сек, мой код - за 12 сек (на моём компе, ессно...). Не такой уж и значительный выигрыш.
С решетом я экспериментировал. О результатах сообщу позднее.