, N > 3 (6 Γ M Β± 1) M = 1, 2,... ( M = 1 N = 5 N = 7, ). , 5 7. 2 3 , 3 3 .
- . divisor <= n / divisor , , , divisor * divisor <= n. unsigned long long max = sqrt(n); . , . , N , F G (, F Γ G = N), N N.
, 25 (5 Γ 5) 35 (5 Γ 7) , 177 1000 , , , 168 . 121 (11 Γ 11), 143 (13 Γ 11), 289 (17 Γ 17), 323 (17 Γ 19), 841 (29 Γ 29), 899 (29 Γ 31).
:
#include <stdio.h>
int main(void)
{
unsigned long long c;
if (prime(2ULL))
printf("2\n");
if (prime(3ULL))
printf("3\n");
for (c = 5; c < 1000; c += 2)
if (prime(c))
printf("%llu\n", c);
return 0;
}
.
, , divisor , , .
static int prime(unsigned long long n)
{
unsigned long long val = 1;
unsigned long long divisor = 5;
if (n == 2 || n == 3)
return 1;
if (n < 2 || n%2 == 0 || n%3 == 0)
return 0;
for ( ; divisor<=n/divisor; val++, divisor=6*val-1)
{
if (n%divisor == 0 || n%(divisor+2) == 0)
return 0;
}
return 1;
}
, , . +2 -2 .