vote up 1 vote down
star

public class Atkin : IEnumerable { private readonly List primes; private readonly ulong limit;

public Atkin(ulong limit)
{
    this.limit = limit;
    primes = new List<ulong>();
}

private void FindPrimes()
{
    var isPrime = new bool[limit + 1];
    var sqrt = Math.Sqrt(limit);

    for (ulong x = 1; x <= sqrt; x++)
        for (ulong y = 1; y <= sqrt; y++)
        {
            var n = 4*x*x + y*y;
            if (n <= limit && (n % 12 == 1 || n % 12 == 5))
                isPrime[n] ^= true;

            n = 3*x*x + y*y;
            if (n <= limit && n % 12 == 7)
                isPrime[n] ^= true;

            n = 3*x*x - y*y;
            if (x > y && n <= limit && n % 12 == 11)
                isPrime[n] ^= true;
        }

    for (ulong n = 5; n <= sqrt; n++)
        if (isPrime[n])
        {
            var s = n * n;
            for (ulong k = s; k <= limit; k += s)
                isPrime[k] = false;
        }

    primes.Add(2);
    primes.Add(3);
    for (ulong n = 5; n <= limit; n++)
        if (isPrime[n])
            primes.Add(n);
}


public IEnumerator<ulong> GetEnumerator()
{
    if (!primes.Any())
        FindPrimes();

    foreach (var p in primes)
        yield return p;
}


IEnumerator IEnumerable.GetEnumerator()
{
    return GetEnumerator();
}

}

잘 올라가는거 같네요.

flag

1 Answer

vote up 0 vote down
// c++ code
#include <stdio.h>

int main(int argc, char** argv)
{
    puts("-_-");
}

소스 코드 올리는 거 찾느라 약간; 고생했습니다;

B I 지구 인용 ... 다음

101
010

이군요;

... 소스 하일라이팅은 시간 지나야 되는 느낌이네요.

link|flag

Your Answer

Get an OpenID
or

Not the answer you're looking for? Browse other questions tagged or ask your own question.